【发布时间】:2016-11-07 22:47:00
【问题描述】:
如何以可能的最快方式减去 2 个忽略索引的数据帧。
例如,我想减去:
d1=
x1
0 -3.141593
0 -3.141593
0 -3.141593
1 -2.443461
1 -2.443461
来自
d2 =
x2
1 -2.443461
2 -1.745329
3 -1.047198
4 -0.349066
2 0.349066
我尝试过的:
我可以这样做,例如:
dsub = d1.reset_index(drop=True) - d2.reset_index(drop=True)
但是,我想以最有效的方式进行减法。我一直在寻找答案,但我只看到了不考虑速度的解决方案。
我该如何做到这一点?
编辑根据一些答案,以下是在我的机器上运行的一些时间:
对于较小的数据框:
方法一(a和b):
a: d1.reset_index(drop=True) - d2.reset_index(drop=True)
b: d1.reset_index(drop=True).sub(d2.reset_index(drop=True))
~1024.91 usec/pass
方法二:
d1 - d2.values
~784.79 usec/pass
方法三:
pd.DataFrame(d1.values - d2.values, d1.index, ['x1-x2'])
~653.82 usec/pass
对于非常大的数据帧,请参阅下面@MaxU 的答案。
【问题讨论】:
-
试试这个:
d1 - d2.values -
@MaxU 那不会返回一个 numpy.array 吗?如果这是所需的输出,则必须将其转换回 DataFrame。编辑:错过了你的编辑,nvm!
-
@beeftendon,是的,谢谢!我已经更正了我的评论并在我的答案中添加了一个演示
标签: python performance pandas dataframe