减去DataFrame的最佳方法

时间:2019-11-13 10:59:11

标签: python pandas dataframe

我有以下两个DataFrame:

d1 = pd.DataFrame({'A':[1,2,3],'B':[10,20,30]})
   A   B
0  1  10
1  2  20
2  3  30

d2 = pd.DataFrame({'A':[1,3,2],'B':[10,20,30]})
   A   B
0  1  10
1  3  20
2  2  30

我想将这两个DataFrame d1 - d2减去,得到预期结果:

   A   B
0  1  0
1  3  -10
2  2  10

做到这一点的最佳方法是什么? 有人可以帮我吗?

3 个答案:

答案 0 :(得分:3)

方法1

使用sort_valuesreset_index分配索引:

d2['B'] = d1['B'] - d2.sort_values('A')['B'].reset_index(drop=True)

方法2

或者将numpy.arrayto_numpy一起使用,这样我们可以在排序后忽略索引中的未分配:

d2['B'] = d1['B'] - d2.sort_values('A')['B'].to_numpy()

方法3

我们还可以将map的{​​{1}}列Ad1,这样就可以消除两个数据帧中的d2列:

B

输出

d2['B'] = d2['B'] - d2['A'].map(d1.set_index('A')['B'])

答案 1 :(得分:1)

我们也可以使用DataFrame.merge

d2['B']=d2.merge(d1,on='A').diff(-1,axis=1)['B_x']
print(d2)

   A     B
0  1   0.0
1  3 -10.0
2  2  10.0

答案 2 :(得分:0)

您可以将每个数据帧的set_index依次复制到Areset_index

d2['B'] = (d1.set_index('A') - d2.set_index('A')).reset_index(drop=True)

print(d2)

输出:

   A   B
0  1   0
1  3 -10
2  2  10
相关问题