繁体   English   中英

熊猫中两个数据框之间的差异

[英]difference between two dataframes in Pandas

我试图找到两个数据框之间的差异,并且生成的df应该返回与第一个数据框匹配的行。 由于df2中不存在id的6,7,因此计数值保持不变。

我的两个数据框

在此处输入图片说明

结果数据框:

在此处输入图片说明

使用subset_index为对齐DataFrame由s id列,添加reindex用于id只能由df1.id

df = (df1.set_index('id')
        .sub(df2.set_index('id'), fill_value=0)
        .reindex(df1['id'])
        .astype(int)
        .reset_index())
print (df)
   id  count
0   1      0
1   2      0
2   3      0
3   4      0
4   5      0
5   6      9
6   7      4

另一种解决方案是merge和左联接,然后用pop减去count_ column来减去sub

df = df1.merge(df2, on='id', how='left', suffixes=('','_'))
df['count'] = df['count'].sub(df.pop('count_'), fill_value=0).astype(int)
print (df)
   id  count
0   1      0
1   2      0
2   3      0
3   4      0
4   5      0
5   6      9
6   7      4

设置

df1 = pd.DataFrame({'id':[1,2,3,4,5,6,7],
                    'count':[3,5,6,7,2,9,4]})

print (df1)
   id  count
0   1      3
1   2      5
2   3      6
3   4      7
4   5      2
5   6      9
6   7      4

df2 = pd.DataFrame({'id':[1,2,3,4,5,8,9],
                    'count':[3,5,6,7,2,4,2]})

print (df2)
   id  count
0   1      3
1   2      5
2   3      6
3   4      7
4   5      2
5   8      4
6   9      2

采用:

temp = pd.merge(df1, df2, how='left', on='id').fillna(0)
temp['count'] = temp['count_x'] - temp['count_y']
temp[['id', 'count']]

   id  count
0   1    0.0
1   2    0.0
2   3    0.0
3   4    0.0
4   5    0.0
5   6    9.0
6   7    4.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM