首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大熊猫随时间群滚动功能

大熊猫随时间群滚动功能
EN

Stack Overflow用户
提问于 2015-10-29 11:32:57
回答 1查看 1.4K关注 0票数 5

这是我的问题。我有一个DataFrame,如下所示:

代码语言:javascript
复制
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,窗口=‘1M’):

代码语言:javascript
复制
2013-10      1.5
2013-11      3.5
2013-12      5.5 

rolling_mean(df,窗口=‘2m’):

代码语言:javascript
复制
2013-10      NAN
2013-11      2.5
2013-12      4.5 

rolling_mean(df,window='3M'):

代码语言:javascript
复制
2013-10      NAN
2013-11      NAN
2013-12      3.5 

rolling_mean(df,window='1Y'):

代码语言:javascript
复制
2013-10      NAN
2013-11      NAN
2013-12      NAN

1米是“1个月”,2米是“2个月”。窗口不是int值,而是时间间隔,例如'1D‘、'3M’、'1Y‘等等。该函数可以按时间单元(如“D”、“M”、“Y”)对数据进行分组,然后在时间单元(如1、3)之前对数据进行滚动。

我需要像这样的滚动功能吗?有人能帮我吗?我描述得清楚了吗?非常感谢。

更新:

我还有个谜题。我需要实现这样一个函数,它可以计算每天的滚动标准差,而不是按月重放,但窗口步进单位按月加权。

在这个场景中,我拥有的也是df:

代码语言:javascript
复制
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'),window=1):

结果是

代码语言:javascript
复制
2013-10    NAN
2013-11    NAN 
2013-12    NAN

我真正想要的是这样的数据格式(window=1 ):

代码语言:javascript
复制
2013-10    0.5
2013-11    0.5 
2013-12    0.5

第一个0.5是np.sqrt(1,2)从10月份开始计算的标准差。另外0.5来自3,4和5,6。然而,无论重采样函数中的方法如何= 'xxx‘,结果都是不正确的。两个月的客观结果是,

df (窗口=2 ):

代码语言:javascript
复制
2013-10    NAN
2013-11    1.1180 
2013-12    1.1180

前1.1180为标准偏差,可由np.sqrt(1,2,3,4)在10月和11月计算。从2013年到2012年的1.1180是2013年的3,4,5,6和2013年-12.

附注:标准差是我想要实现滚动的功能之一。谢谢~

EN

回答 1

Stack Overflow用户

发布于 2015-10-29 16:29:44

可以在日期列上使用to_datetime生成日期时间索引。

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33413082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档