在Pandas中有效地进行交叉计算

时间:2015-10-07 12:29:16

标签: python pandas

我有一个pandas数据框,如下所示:

Date          A B C D
2015-08-07    1 2 4 5
2015-08-06    5 6 2 5
2015-08-05    9 6 3 0
...
2015-09-01    3 4 6 7

我需要生成一个新的数据框,其中行值变为与前一天相比的日常变化。

Date         A  B  C D
2015-08-07  -4 -4  2 0   # 2015-08-07 data minus the 2015-08-06 data
2015-08-06  -4  0 -1 5
...
2015-09-02 

我可以用奇怪的for循环和令人讨厌的索引黑客做到这一点,但我确信在pandas中会有更优雅的方法(相当于vectorization和for-loops)。谁能建议合适的熊猫方法?

1 个答案:

答案 0 :(得分:3)

致电diff并通过-1向上移动一段时间:

In [69]:
df.diff(-1)
Out[69]:
      Date   A   B   C   D
0   1 days  -4  -4   2   0
1   1 days  -4   0  -1   5
2 -27 days   6   2  -3  -7
3      NaT NaN NaN NaN NaN

此外,您几乎不需要按行迭代,因此请避免使用for循环,applyiterrows等等。