python - 减去数据框的最佳方法

标签 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

最好的方法是什么? 有人可以帮助我吗?

最佳答案

方法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:

我们还可以将d1A映射d2,这样就可以对齐两个数据框中的 B 列:

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

输出

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

关于python - 减去数据框的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58835624/

相关文章:

python - 使用日期时间索引或列查询 Python Pandas DataFrame

Python - Pandas - DataFrame 减少行数

python - 如何在Python中退格 'evaluate'?

python - 使用 Python 通过 Mailgun 提交变量时出错

Python - 从 C++ DLL 错误打印值

pandas - 根据条件从另一个数据框中复制列值

python - 适用于 Python 的 Azure 网站管理客户端 : how to get web app by ID?

python - 标记一列中的 ID 第一次出现在另一列中

python - Pandas 将基于日期时间类型的数据框分组到忽略日期部分的不同时期

r - 比较两列以匹配值并并排对齐