Python 熊猫,用前几行之间的平均变化在日期之间填充
我认为最好用例子来说明这一点。假设我们有这样一个数据帧:Python 熊猫,用前几行之间的平均变化在日期之间填充,python,pandas,Python,Pandas,我认为最好用例子来说明这一点。假设我们有这样一个数据帧: 295340 299616 2014-11-02 304.904110 157.123288 2014-12-02 597.303413 305.488493 2015-01-02 896.310372 454.614630 2015-02-02 1192.379580 599.588466 2015-02-04 1211.285484 NaN 2015-
295340 299616
2014-11-02 304.904110 157.123288
2014-12-02 597.303413 305.488493
2015-01-02 896.310372 454.614630
2015-02-02 1192.379580 599.588466
2015-02-04 1211.285484 NaN
2015-03-02 NaN 726.622932
rng = pd.date_range(df.index[0], df.index[-1])
df.reindex(rng)
295340 299616
2014-11-02 304.904110 157.123288
2014-11-03 NaN NaN
2014-11-04 NaN NaN
2014-11-05 NaN NaN
...
2014-11-29 NaN NaN
2014-11-30 NaN NaN
2014-12-01 NaN NaN
2014-12-02 597.303413 305.488493
295340 299616
2014-11-02 304.904110 157.123288
2014-11-03 314.336345 NaN
2014-11-04 323.768581 NaN
2014-11-05 333.200816 NaN
现在让我们假设我想重新索引这个,像这样:
295340 299616
2014-11-02 304.904110 157.123288
2014-12-02 597.303413 305.488493
2015-01-02 896.310372 454.614630
2015-02-02 1192.379580 599.588466
2015-02-04 1211.285484 NaN
2015-03-02 NaN 726.622932
rng = pd.date_range(df.index[0], df.index[-1])
df.reindex(rng)
295340 299616
2014-11-02 304.904110 157.123288
2014-11-03 NaN NaN
2014-11-04 NaN NaN
2014-11-05 NaN NaN
...
2014-11-29 NaN NaN
2014-11-30 NaN NaN
2014-12-01 NaN NaN
2014-12-02 597.303413 305.488493
295340 299616
2014-11-02 304.904110 157.123288
2014-11-03 314.336345 NaN
2014-11-04 323.768581 NaN
2014-11-05 333.200816 NaN
现在如果我们看295340,我们看到它们的值之间的差异是(597.30-304.90)=292.39
两个值之间的天数为31天。因此平均每天增加9.43
所以我想要的是这样的东西:
295340 299616
2014-11-02 304.904110 157.123288
2014-12-02 597.303413 305.488493
2015-01-02 896.310372 454.614630
2015-02-02 1192.379580 599.588466
2015-02-04 1211.285484 NaN
2015-03-02 NaN 726.622932
rng = pd.date_range(df.index[0], df.index[-1])
df.reindex(rng)
295340 299616
2014-11-02 304.904110 157.123288
2014-11-03 NaN NaN
2014-11-04 NaN NaN
2014-11-05 NaN NaN
...
2014-11-29 NaN NaN
2014-11-30 NaN NaN
2014-12-01 NaN NaN
2014-12-02 597.303413 305.488493
295340 299616
2014-11-02 304.904110 157.123288
2014-11-03 314.336345 NaN
2014-11-04 323.768581 NaN
2014-11-05 333.200816 NaN
我的计算方法是:
304.904110 + (((597.303413-304.904110) / 31) * N)
其中,N是自第1行之后的第一行的1,之后的第2行等
很明显,我希望所有列都以这种方式填充,因此299616使用相同的方法等等
有没有尽可能高效的想法?我知道这样做的方法,但似乎没有什么是有效的,而且似乎应该有某种类型的fillna()或类似的东西来解决这类金融相关的问题
注:并非所有柱的间距都相同。每个列都可以在日期范围内的任意位置有数字,因此我不能假定每个列的下一个数字将在X日期。您可以在重新采样后使用“time”
方法。(它不会给出你给出的数字,因为11月2日到12月2日之间只有30天,而不是31天):
这里的缺点是,它将使用末尾的最后一个值进行推断:
[...]
2015-01-31 1173.278341 590.235315
2015-02-01 1182.828960 594.911891
2015-02-02 1192.379580 599.588466
2015-02-03 1201.832532 604.125411
2015-02-04 1211.285484 608.662356
2015-02-05 1211.285484 613.199302
2015-02-06 1211.285484 617.736247
[...]
因此,您必须决定如何处理该问题。对于初学者,请查看resample()