我的数据帧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
答案 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_on
和right_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 Documentation和 examples