[英]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.