pandas rolling()函数,每月关闭

2024-06-07 00:18:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在pandas数据帧上使用rolling()函数来处理每月的数据。但是,我删除了一些NaN值,所以现在我的时间序列中有一些空白。因此,基本窗口参数给出了一个误导性的答案,因为它只查看前面的观察结果:

import pandas as pd
import numpy as np
import random
dft = pd.DataFrame(np.random.randint(0,10,size=len(dt)),index=dt)
dft.columns = ['value']
dft['value'] = np.where(dft['value'] < 3,np.nan,dft['value'])
dft = dft.dropna()
dft['basic'] = dft['value'].rolling(2).sum()

请参见,例如2017-08-31条目,其总和为3.0和9.0,但上一个条目是2017-03-31。在

^{pr2}$

自然的解决方案(我想)是使用“2M”偏移量,但它会产生一个错误:

In [58]: dft['basic2M'] = dft['value'].rolling('2M').sum()
...<output omitted>...
ValueError: <2 * MonthEnds> is a non-fixed frequency

如果移动每日偏移量,则可以使其工作,但这似乎是一种奇怪的解决方法:

In [59]: dft['basic32D'] = dft['value'].rolling('32D', min_periods=2).sum()

In [61]: dft.tail()
Out[61]:
            value  basic  basic32D
2017-02-28    8.0   12.0      12.0
2017-03-31    3.0   11.0      11.0
2017-08-31    9.0   12.0       NaN
2017-10-31    7.0   16.0       NaN
2017-11-30    7.0   14.0      14.0

我还试着转换为周期索引:

dfp = dft.to_period(freq='M')

但这也产生了同样的错误:

dfp['basic2M'] = dfp['value'].rolling('2M').sum()

这是非常出乎意料的:

dfp['basic32Dp'] = dfp['value'].rolling('32D', min_periods=2).sum()
In [68]: dfp
Out[68]:
         value  basic  basic32D  basic32Dp
2016-02    9.0    NaN       NaN        NaN
2016-03    3.0   12.0      12.0       12.0
2016-04    7.0   10.0      10.0       19.0
2016-05    3.0   10.0      10.0       22.0
2016-06    4.0    7.0       7.0       26.0
2016-07    7.0   11.0      11.0       33.0
2016-08    3.0   10.0      10.0       36.0
2016-09    9.0   12.0      12.0       45.0
2016-11    5.0   14.0       NaN       50.0
2017-01    4.0    9.0       NaN       54.0
2017-02    8.0   12.0      12.0       62.0
2017-03    3.0   11.0      11.0       65.0
2017-08    9.0   12.0       NaN       74.0
2017-10    7.0   16.0       NaN       81.0
2017-11    7.0   14.0      14.0       88.0

“32D”与“M”期间指数的偏移量似乎被视为“3200万”?它似乎只是整个系列的扩展和。在

也许我误解了如何使用偏移量?显然,我可以通过将NaN保留在原始的value列中并只使用window参数来解决这个问题,但是偏移量似乎非常有用。在

不管怎样,如果我用一个DateTimeIndex生成每小时一次的数据,一切似乎都像预期的那样工作(例如,每隔12小时数据的“2D”偏移量在缺失的行中给出了正确的答案)。在


Tags: 数据inimportpandas参数basicvaluenp