熊猫掉落部分重复

时间:2018-08-05 12:53:46

标签: python pandas

我有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

当列yz重复时,我想删除。

所需结果:

        x  y  z
    1   a  c  2

因为df1和df2在yz列中都具有相同的值

4 个答案:

答案 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