我想删除重复的行,无论是在列中A
还是B
在以下内容中df
:
df = pd.DataFrame({"A":[1, 1, 2, 3, 4], "B": [2, 3, 7, 5, 5], "C": [1, 2, 3, 3, 4]})
print(df)
A B C
0 1 2 1
1 1 3 2
2 2 7 3
3 3 5 3
4 4 5 4
我的预期输出将是这样的:
A B C
0 1 2 1
2 2 7 3
3 3 5 3
显然df.drop_duplicates(subset=['A', 'B'], keep=False)
不会产生我想要的。
以下代码可以运行,但是有点长。只是想知道是否还有其他更简洁的解决方案?谢谢。
df.drop_duplicates('A', inplace=True)
df.drop_duplicates('B', inplace=True)
print(df)
A B C
0 1 2 1
2 2 7 3
3 3 5 3
如果只有少数测试列,则可Series.duplicated
与chain by by&
和inversion by一起使用~
:
df = df[~(df['A'].duplicated() | df['B'].duplicated())]
或者,如果要测试更多列,请使用带有np.logical_or.reduce
以下内容的列列表:
df = df[~np.logical_or.reduce([df[x].duplicated() for x in ['A', 'B']])]
或DataFrame.apply
搭配DataFrame.any
:
df = df[~df[['A', 'B']].apply(lambda x: x.duplicated()).any(1)]
print (df)
A B C
0 1 2 1
2 2 7 3
3 3 5 3
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句