[英]Python Pandas compare values in multiple columns for partial duplicates and drop record
[英]Pandas Drop partial duplicates
我有2個DFS:
df1:
x y z
0 1 2 r
1 a c 2
2 22 g d
df2:
x y z
0 1 2 r
1 a b 2
2 3 g d
當列y
和z
重復時,我想刪除。
所需結果:
x y z
1 a c 2
因為df1和df2在y
和z
列中都具有相同的值
cols=['y','z']#columns to check for having same value
df1[~(df1[cols]==df2[cols]).all(axis=1)]#extracting the rows where x and y are `not equal(~)` in both dataframes
使用pd.merge
你可以做
In [266]: dff = df1.merge(df2, on=['y', 'z'], how='left', indicator=True,
suffixes=['', 'right'])
In [267]: dff.loc[dff['_merge'].eq('left_only'), ['x', 'y', 'z']]
Out[267]:
x y z
1 a c 2
一種解決方案可能是
df1[df1.merge(df2, 'left', ['y', 'z']).x_y.isnull()]
或者,有些低調,
df1[(df1[['y', 'z']] != df2[['y', 'z']]).any(1)]
實現它的另一種方法是使用loc
pd.DataFrame(df1.loc[(df1.y != df2.y) | (df1.z != df2.z)])
輸出量
x y z
1 a c 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.