我有以下两个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
做到这一点的最佳方法是什么? 有人可以帮我吗?
答案 0 :(得分:3)
方法1 :
使用sort_values
和reset_index
分配索引:
d2['B'] = d1['B'] - d2.sort_values('A')['B'].reset_index(drop=True)
方法2 :
或者将numpy.array
与to_numpy
一起使用,这样我们可以在排序后忽略索引中的未分配:
d2['B'] = d1['B'] - d2.sort_values('A')['B'].to_numpy()
方法3 :
我们还可以将map
的{{1}}列A
到d1
,这样就可以消除两个数据帧中的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
依次复制到A
和reset_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