累积地将操作应用于pandas DataFrame中的连续行

Jos*_*osh 2 python dataframe pandas

我有一只DataFrame看起来如下的熊猫:

sample = pd.DataFrame([[2,3],[4,5],[6,7],[8,9]],
                      index=pd.date_range('2017-08-01','2017-08-04'),
                      columns=['A','B'])

             A   B
2017-08-01   2   3
2017-08-02   4   5
2017-08-03   6   7
2017-08-04   8   9
Run Code Online (Sandbox Code Playgroud)

我想将这些值累加到列中.以列A为例,第二行变为2*4第三行2*4*6,最后一行变为2*4*6*8.B列也是如此.所以,期望的结果是:

             A    B
2017-08-01   2    3
2017-08-02   8    15
2017-08-03   48   105
2017-08-04   384  945
Run Code Online (Sandbox Code Playgroud)

必须有一些内置的方法来做到这一点,但由于链式分配问题,我甚至在使用for循环时遇到了问题.

cs9*_*s95 5

使用 DataFrame.cumprod

out = sample.cumprod()
print(out)
              A    B
2017-08-01    2    3
2017-08-02    8   15
2017-08-03   48  105
2017-08-04  384  945
Run Code Online (Sandbox Code Playgroud)

您还可以使用np.cumprod值:

sample[:] = np.cumprod(sample.values, axis=0)
print(sample)
              A    B
2017-08-01    2    3
2017-08-02    8   15
2017-08-03   48  105
2017-08-04  384  945
Run Code Online (Sandbox Code Playgroud)

最后,使用itertools.accumulate(只是为了好玩):

from itertools import accumulate
from operator import mul

pd.DataFrame(np.column_stack([
                 list(accumulate(sample[c], mul)) for c in sample.columns]), 
             index=sample.index, 
             columns=sample.columns)

              A    B
2017-08-01    2    3
2017-08-02    8   15
2017-08-03   48  105
2017-08-04  384  945
Run Code Online (Sandbox Code Playgroud)