在上一行的pandas上创建新列

时间:2014-09-19 18:02:58

标签: python pandas data-analysis

我有一个每月含税的pandas DataFrame。

>> df
2014-08-01    0.25
2014-07-01    0.01
2014-06-01    0.40
2014-05-01    0.46
2014-04-01    0.67
2014-03-01    0.92
2014-02-01    0.69
2014-01-01    0.55
2013-12-01    0.92
2013-11-01    0.54
2013-10-01    0.57
2013-09-01    0.35
2013-08-01    0.24
2013-07-01    0.03
2013-06-01    0.26
.
.
.

我需要使用最后三个值创建一个包含累计税的新列。例如:

>> df
2014-08-01    0.25    0.66
2014-07-01    0.01    0.87
2014-06-01    0.40    1.54
2014-05-01    0.46    2.06
2014-04-01    0.67    2.30
2014-03-01    0.92
2014-02-01    0.69
2014-01-01    0.55
.
.
.

(1.0025 * 1.0001 * 1.0040 = 1.0066 - >(1.0066 - 1)/ 100 - > 0.66

(1.0001 * 1.0040 * 1.0046 = 1.0066 - >(1.0087 - 1)/ 100 - > 0.87

在熊猫中最简单的方法是什么?

1 个答案:

答案 0 :(得分:2)

内置方法rolling_sum,我也会在最后调用shift,以便按照您想要的方式对齐:

In [14]:

df['rolling_sum']= pd.rolling_sum(df['value'],window=3).shift(-2)
df
Out[14]:
          time  value  rolling_sum
0   2014-08-01   0.25         0.66
1   2014-07-01   0.01         0.87
2   2014-06-01   0.40         1.53
3   2014-05-01   0.46         2.05
4   2014-04-01   0.67         2.28
5   2014-03-01   0.92         2.16
6   2014-02-01   0.69         2.16
7   2014-01-01   0.55         2.01
8   2013-12-01   0.92         2.03
9   2013-11-01   0.54         1.46
10  2013-10-01   0.57         1.16
11  2013-09-01   0.35         0.62
12  2013-08-01   0.24         0.53
13  2013-07-01   0.03          NaN
14  2013-06-01   0.26          NaN