从与另一个数据框中的列组合不匹配的熊猫数据框中删除行

时间:2020-01-28 07:32:36

标签: python pandas dataframe

我的数据帧1看起来像:

   Col1 Col2 Col3
1   A    4    ab
2   A    5    de
3   A    2    ah
4   B    1    ac
5   B    3    jd
6   B    2    am

数据帧2:

  col1 col2
1  A    4
2  B    3

如何删除数据框1中与数据框2的行组合不匹配的所有行?

预期输出:

   Col1 Col2 Col3
1   A    4    ab
2   B    3    jd

2 个答案:

答案 0 :(得分:1)

DataFrame.merge与内部联接一起使用,仅需要重命名列:

df = df2.rename(columns={'col1':'Col1','col2':'Col2'}).merge(df1, on=['Col1','Col2'])
#on should be omited, then merge by intersection of columns of df1, df2
#df = df2.rename(columns={'col1':'Col1','col2':'Col2'}).merge(df1)

print (df)
  Col1  Col2 Col3
0    A     4   ab
1    B     3   jd

另一个想法是使用left_onright_on参数,然后删除名称为df2.columns的列:

df = (df2.merge(df1, left_on=['col1','col2'], 
                     right_on=['Col1','Col2']).drop(df2.columns, axis=1))
print (df)
  Col1  Col2 Col3
0    A     4   ab
1    B     3   jd

如果列名相同:

print (df2)
  Col1  Col2
1    A     4
2    B     3

df = df2.merge(df1, on=['Col1','Col2'])
#df = df2.merge(df1)
print (df)
  Col1  Col2 Col3
0    A     4   ab
1    B     3   jd

答案 1 :(得分:0)

您还可以使用连接进行内部连接

dfR = df1.join( df ,on=['Col1','Col2'] ,how='inner',rsuffix='_x')
dfR[['Col1','Col2','Col3']]

这也将为您带来相同的结果

   Col1 Col2 Col3
1   A    4    ab
2   B    3    jd

有关更多详细信息,请检查以下链接Join Documentationexamples