所以,我有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}中}应该存在。但是,比较应该仅在CLASS
和DIVISION
列上。
Expected Output:
ID,CLASS,DIVISION
2,456,5G
3,123,4G
现在,我可以在DataframeA
的{{1}}和DataframeB
之间进行左联接,然后仅选择{{的[CLASS, DIVISION]
列的isNull
值1}}就像这样:
CLASS, DIVISION
但是我想知道是否还有优雅或 Pythonic 的方式。
答案 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