我有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
列中都具有相同的值
答案 0 :(得分:2)
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
答案 1 :(得分:1)
您可以使用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
答案 2 :(得分:1)
一个解决方案可能是
df1[df1.merge(df2, 'left', ['y', 'z']).x_y.isnull()]
或者,有些低调,
df1[(df1[['y', 'z']] != df2[['y', 'z']]).any(1)]
答案 3 :(得分:1)
另一种实现方法是使用loc
pd.DataFrame(df1.loc[(df1.y != df2.y) | (df1.z != df2.z)])
输出
x y z
1 a c 2