Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫,用前几行之间的平均变化在日期之间填充_Python_Pandas - Fatal编程技术网

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()