pandas drop_duplicates 其他两个列值的条件
pandas drop_duplicates condition on two other columns values
我有一个包含 A、B 和 C 列的数据框。
A列是重复的地方。 B 列是电子邮件值或 NaN 所在的位置。 C 列是 'wait' 值或数字所在的位置。
我的数据框在 A 中有重复值。我想保留那些在 B 中具有非 NaN 值而在 C 中具有非 'wait' 值的值(即数字)。
我怎么能在 df 数据帧上做到这一点?
我试过 df.drop_duplicates('A') 但我没有在其他列上看到任何条件
编辑:
示例数据:
df=pd.DataFrame({'A':[1,1,2,2,3,3],'B':['a@b.com',np.nan,np.nan,'c@d.com','np.nan',np.nan],'C':[123,456,567,'wait','wait','wait']})
>>> df
A B C
0 1 a@b.com 123
1 1 NaN 456
2 2 NaN 567
3 2 c@d.com wait
4 3 np.nan wait
5 3 NaN wait
我想要一个结果数据框
>>> df
A B C
0 1 a@b.com 123
1 2 c@d.com 567
2 3 np.nan wait
谢谢
最好的,
解决方案按 A, C
列排序,首先测试是否匹配 wait
,然后如果每个组按列 A
:
存在,则获取第一个非缺失值
df = df.sort_values(['A', 'C'], key = lambda x: x.eq('wait')).groupby('A').first()
print (df)
B C
A
1 a@b.com 123
2 c@d.com 567
3 np.nan wait
我有一个包含 A、B 和 C 列的数据框。 A列是重复的地方。 B 列是电子邮件值或 NaN 所在的位置。 C 列是 'wait' 值或数字所在的位置。 我的数据框在 A 中有重复值。我想保留那些在 B 中具有非 NaN 值而在 C 中具有非 'wait' 值的值(即数字)。 我怎么能在 df 数据帧上做到这一点? 我试过 df.drop_duplicates('A') 但我没有在其他列上看到任何条件
编辑: 示例数据:
df=pd.DataFrame({'A':[1,1,2,2,3,3],'B':['a@b.com',np.nan,np.nan,'c@d.com','np.nan',np.nan],'C':[123,456,567,'wait','wait','wait']})
>>> df
A B C
0 1 a@b.com 123
1 1 NaN 456
2 2 NaN 567
3 2 c@d.com wait
4 3 np.nan wait
5 3 NaN wait
我想要一个结果数据框
>>> df
A B C
0 1 a@b.com 123
1 2 c@d.com 567
2 3 np.nan wait
谢谢 最好的,
解决方案按 A, C
列排序,首先测试是否匹配 wait
,然后如果每个组按列 A
:
df = df.sort_values(['A', 'C'], key = lambda x: x.eq('wait')).groupby('A').first()
print (df)
B C
A
1 a@b.com 123
2 c@d.com 567
3 np.nan wait