![](/img/trans.png)
[英]Dropping rows with pandas data frame when multiple Null values exist
[英]Group by rows with null values in pandas data frame
檢測到的文本 | 信心 | 圖像名稱 | 參考 | all_text |
---|---|---|---|---|
紐約市 | 73.215164 | 14.JPEG | 鈉 | 鈉 |
9:36 | 91.633514 | 14.JPEG | 鈉 | 鈉 |
MICKEYD19 | 89.422897 | 14.JPEG | 鈉 | 鈉 |
ln | 59.588081 | 14.JPEG | 鈉 | 鈉 |
成人 | 98.488983 | 14.JPEG | 9b01dc1e | 鈉 |
ln | 59.588081 | 15.JPEG | 鈉 | 鈉 |
成人 | 98.488983 | 15.JPEG | 鈉 | 鈉 |
這就是我的 dataframe 的樣子,並希望通過IMAGE_NAME
將行組合為一個,並將DETECTEDTEXT
的內容合並到ALL_TEXT
並保留REF
,其中REF
具有非空值和相應的CONFIDENCE
行。 如果相同的圖像 (15.jpeg) 在REF
列中具有所有 null 值,則要將DETECTEDTEXT
合並到ALL_TEXT
中,請將CONFIDENCE
更改為 Null。
預期結果:
信心 | 圖像名稱 | 參考 | 全部文本 |
---|---|---|---|
98.488983 | 14.JPEG | 9b01dc1e | INY 9:36 MICKEYD19 Ln 成人 |
鈉 | 15.JPEG | 鈉 | 成人 |
我嘗試單獨使用 groupby 來滿足我的每個要求,但我得到的錯誤是 `TypeError: sequence item 0: expected string, int found
請試試:
選項1:
df1 = df.sort_values(['IMAGE_NAME','REF'], ascending=False)
df1 = df1.groupby('IMAGE_NAME').agg({'DETECTEDTEXT' : ' '.join , 'REF': 'last','CONFIDENCE':'last'}).reset_index()[['IMAGE_NAME','REF','CONFIDENCE','DETECTEDTEXT']]
df1.loc[df1['REF'].isnull(), 'CONFIDENCE'] = np.NaN
df1.rename(columns={'DETECTEDTEXT':'ALL_TEXT'},inplace=True)
選項#2
df1 = df.fillna('0')
df1 = df1.groupby('IMAGE_NAME').agg({'DETECTEDTEXT' : ' '.join , 'REF': 'max'}).reset_index()
df1 = df1.merge(df,on=['IMAGE_NAME','REF'], how='left')[['IMAGE_NAME','REF','CONFIDENCE','DETECTEDTEXT_x']]
df1 = df1.rename(columns={'DETECTEDTEXT_x' : 'ALL_TEXT'})
df1['REF'] = df1.REF.replace('0',np.NaN)
兩種打印:
IMAGE_NAME REF CONFIDENCE ALL_TEXT
0 14.jpeg 9b01dc1e 98.488983 INY 9:36 MICKEYD19 Ln ADULT
1 15.jpeg NaN NaN Ln ADULT
輸入 df:
DETECTEDTEXT CONFIDENCE IMAGE_NAME REF ALL_TEXT
0 INY 73.215164 14.jpeg NaN NaN
1 9:36 91.633514 14.jpeg NaN NaN
2 MICKEYD19 89.422897 14.jpeg NaN NaN
3 Ln 59.588081 14.jpeg NaN NaN
4 ADULT 98.488983 14.jpeg 9b01dc1e NaN
5 Ln 59.588081 15.jpeg NaN NaN
6 ADULT 98.488983 15.jpeg NaN NaN
Option#1 : Option#1 更優雅,是在我寫完 Option#2 之后出現的。 只需對 IMAGE_NAMe & 'REF' 組合進行排序並使用groupby
。
選項#2 :首先將所有 NaN 替換為零以便於計算,使用 'REF' 的groupby
'REF': 'MAX
為 14.jpeg 返回 9b01dc1e,為 15.jpeg 返回 0。 現在使用pd.merge
,選擇與這些 REF 值對應的“置信度”分數。 對於 14.jpeg,它從原始 df 返回 9b01dc1e 的正確匹配,對於 15.jpeg,它返回 NaN,因為原始 df 中沒有匹配 0。 所以我們得到了所需的輸入。
注意:如果同一圖像可以有多個非 null REF 值,則代碼可能需要進行一些更改。 如果是這樣,我們可能還需要做一些其他的預處理。 除此之外,這應該有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.