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

时间:2017-09-01 04:13:11

标签: python pandas dataframe

我有一只大熊猫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

我想将这些值累加到列中。以列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

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

3 个答案:

答案 0 :(得分:5)

使用DataFrame.cumprod

<?php
    $email = (isset($_POST["email"]) ? $_POST["email"] : "");
    $token = (isset($_POST["token"]) ? $_POST["token"] : "");
?>

您还可以对值使用np.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

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

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

答案 1 :(得分:4)

使用DataFrame.cumprod

value.isInstanceOf[Map[_, _]]

替代numpy.cumprod

print (sample.cumprod())
              A    B
2017-08-01    2    3
2017-08-02    8   15
2017-08-03   48  105
2017-08-04  384  945

<强>计时

print (np.cumprod(sample))
              A    B
2017-08-01    2    3
2017-08-02    8   15
2017-08-03   48  105
2017-08-04  384  945

答案 2 :(得分:0)

数据框有一个名为cumprod的方法。您可以按如下方式使用它

sample.cumprod()