这是我的问题。 我所拥有的是一个DataFrame,如下所示:
df:
2013-10-24 1
2013-10-25 2
2013-11-27 3
2013-11-28 4
2013-12-01 5
2013-12-02 6
我想要的是像这样的DataFrame:
rolling_mean(df,window =' 1M'):
2013-10 1.5
2013-11 3.5
2013-12 5.5
rolling_mean(df,window =' 2M'):
2013-10 NAN
2013-11 2.5
2013-12 4.5
rolling_mean(df,window =' 3M'):
2013-10 NAN
2013-11 NAN
2013-12 3.5
rolling_mean(df,window =' 1Y'):
2013-10 NAN
2013-11 NAN
2013-12 NAN
其中1M是1个月',2M是' 2个月'。该窗口不是一个int值,而是一个时间间隔,例如' 1D' 3M'' 1Y'等等。该功能可以按时间单位对数据进行分组,例如' D' M' M' Y' Y',然后通过数字滚动数据帧单位如1,3 ......
我需要像这样的滚动功能? 有人能帮助我吗?我有没有明确说明? 非常感谢。
更新
我还有一个难题。 我需要实现这样一个函数,它可以计算每天的滚动标准偏差,而不是按月重新采样,但是窗口步长单位是按月计算的。
在这种情况下, 我所拥有的也是 DF:
2013-10-24 1
2013-10-25 2
2013-11-27 3
2013-11-28 4
2013-12-01 5
2013-12-02 6
pd.rolling_std(df.resample(' 1M&#39),窗口= 1):
结果是
2013-10 NAN
2013-11 NAN
2013-12 NAN
我真的是这样的数据帧(window = 1):
2013-10 0.5
2013-11 0.5
2013-12 0.5
前0.5是标准偏差,可以从10月开始通过np.sqrt([1,2])计算得出。 另外0.5来自[3,4]和[5,6]。 但是,无论如何=' xxx'重采样函数中的方法,结果不对。 2个月的客观结果是,
df(window = 2):
2013-10 NAN
2013-11 1.1180
2013-12 1.1180
第一个1.1180是标准差,可以通过np.sqrt([1,2,3,4])从10月和11月计算出来。 2013 - 12年度的1.1180来自2013-11和2013-12的[3,4,5,6]。
P.S。 标准偏差是我想实现滚动的功能之一...... 谢谢〜
答案 0 :(得分:2)
您可以在日期列上使用to_datetime
来生成日期时间索引。
df = pd.DataFrame({'value': [1, 2, 3, 4, 5, 6]},
index=['2013-10-24', '2013-10-25', '2013-11-27',
'2013-11-28', '2013-12-01', '2013-12-02'])
df.index = pd.to_datetime(df.index)
>>> pd.rolling_mean(df.resample('1M'), 1, freq='1M')
value
2013-10-31 1.5
2013-11-30 3.5
2013-12-31 5.5
>>> pd.rolling_mean(df.resample('2M'), window=1, freq='1M')
value
2013-10-31 1.5
2013-11-30 NaN
2013-12-31 4.5
>>> pd.rolling_mean(df.resample('1M'), window=2, freq='1M')
value
2013-10-31 NaN
2013-11-30 2.5
2013-12-31 4.5
>>> pd.rolling_mean(df.resample('1M'), window=3, freq='1M')
value
2013-10-31 NaN
2013-11-30 NaN
2013-12-31 3.5
>>> pd.rolling_mean(df.resample('1M'), window=12, freq='1M')
value
2013-10-31 NaN
2013-11-30 NaN
2013-12-31 NaN