微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – pandas滚动功能与时间groupby

这是我的问题.
我有一个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”,“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’),窗口= 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是标准偏差,可以通过10月和11月的np.sqrt([1,2,3,4])计算得出.
2013 – 12年度的1.1180来自2013-11和2013-12的[3,4,5,6].

附:
标准偏差是我想实现滚动的功能之一……
谢谢〜

解决方法:

您可以在日期列上使用to_datetime来生成datetimeindex.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐