比较特定列上的2个数据框

时间:2019-08-07 07:59:50

标签: python pandas python-2.7

所以,我有2个数据框,例如:

DataframeA:

ID,CLASS,DIVISION
1,123,3G
2,456,5G
3,123,4G


DataframeB:

ID,CLASS,DIVISION
1,123,3G
2,456,4G

我想从DataframeA减去 DataframeB DataframeA,以便仅记录在DataframeB中,而不在{{1}中}应该存在。但是,比较应该仅在CLASSDIVISION列上

Expected Output:

ID,CLASS,DIVISION
2,456,5G
3,123,4G

现在,我可以在DataframeA的{​​{1}}和DataframeB之间进行左联接,然后仅选择{{的[CLASS, DIVISION]列的isNull值1}}就像这样:

CLASS, DIVISION

但是我想知道是否还有优雅 Pythonic 的方式。

2 个答案:

答案 0 :(得分:0)

您可以将pd.merge()indicator=True一起使用

res = pd.merge(df1,df2[['CLASS','DIVISION']],on=['CLASS','DIVISION'],how='outer',indicator=True)
res =res[res['_merge']=='left_only'].drop(['_merge'],axis=1)
print(res)
    ID  CLASS DIVISION     
1  2.0    456       5G  
2  3.0    123       4G  

答案 1 :(得分:0)

使用left join df1-左框架,df2-右框架)并过滤出匹配的行:

In [1157]: df3 = df1.merge(df2, on=df1.columns.drop('ID').tolist(), how='left', suffixes=('', '_'))

In [1158]: df3[df3['ID_'].isna()].drop('ID_', axis=1)
Out[1158]: 
   ID  CLASS DIVISION
1   2    456       5G
2   3    123       4G