如何在熊猫中进行滚动求和和乘法?

问题描述

我有以下熊猫DataFrame:

df = pd.DataFrame([[100,100,0],[1.03,1.02,0.97,0.92,1.08,1.03,0.98],[0,0]]).T
df.index = ['2017-12-30','2017-12-30','2017-12-31','2018-01-01','2018-01-02','2018-01-03','2018-01-03']

有输出:

                0     1    2
2017-12-30  100.0  1.03  0.0
2017-12-30  100.0  1.02  0.0
2017-12-31    0.0  0.97  0.0
2018-01-01    0.0  1.02  0.0
2018-01-01    0.0  0.92  0.0
2018-01-02    0.0  1.08  0.0
2018-01-02    0.0  1.03  0.0
2018-01-02    0.0  1.02  0.0
2018-01-03    0.0  1.03  0.0
2018-01-03    0.0  0.98  0.0

但是我想将此DataFrame转换为如下所示的DataFrame:

                0     1    2
2017-12-30  100.00  1.03   3.0
2017-12-30  100.00  1.02   2.0
2017-12-31  105.00  0.97  -3.15
2018-01-01  101.85  1.02   2.037
2018-01-01  101.85  0.92  -8.15
2018-01-02  95.737  1.08   7.65
2018-01-02  95.737  1.03   2.87
2018-01-02  95.737  1.02   1.91
2018-01-03  108.17  1.03   3.25
2018-01-03  108.17  0.98  -2.16
2018-01-04  109.26  np.nan  np.nan

执行的计算如下: 计算最后一列的前两个值。

100 * (1.03-1) = 3
100 * (1.02 -1) = 2

然后第一列中的第三个值将是:

100 + 3 + 2 = 105

计算最后一列的第三行的值。

105 * (0.97-1) = -3.15

然后第一列中的第四和第五个值(与日期相关)将是:

105 -3.15 = 101.85

计算最后一列的第四和第五个值。

 101.85 * (1.02-1) = 2.037
 101.85 * (0.92-1) = -8.15

这一直持续到所有值都填满为止。

Columns 2column 0的{​​{1}}倍。 column 1 - 1来自Columns 0过去(与时间相关)值summation的结果。

每天每一行的第0列具有相同的值。这是通过对第2列的过去(在特定日期之前)值进行求和来实现的。

有什么用!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)