熊猫-移动平均值按多列分组

克雷格

对Pandas来说是新手,所以请多多包涵。

我的数据框的格式为

date,name,country,tag,cat,score
2017-05-21,X,US,free,4,0.0573
2017-05-22,X,US,free,4,0.0626
2017-05-23,X,US,free,4,0.0584
2017-05-24,X,US,free,4,0.0563
2017-05-21,X,MX,free,4,0.0537
2017-05-22,X,MX,free,4,0.0640
2017-05-23,X,MX,free,4,0.0648
2017-05-24,X,MX,free,4,0.0668

我正在尝试找到一种在国家/标签/类别组中查找X天移动平均线的方法,因此我需要:

date,name,country,tag,cat,score,moving_average
2017-05-21,X,US,free,4,0.0573,0
2017-05-22,X,US,free,4,0.0626,0.0605
2017-05-23,X,US,free,4,0.0584,0.0594
2017-05-24,X,US,free,4,0.0563,and so on
...
2017-05-21,X,MX,free,4,0.0537,and so on
2017-05-22,X,MX,free,4,0.0640,and so on
2017-05-23,X,MX,free,4,0.0648,and so on
2017-05-24,X,MX,free,4,0.0668,and so on

我尝试根据需要的列对行进行分组,然后使用pd.rolling_mean,但最终得到了一堆NaN

df.groupby(['date', 'name', 'country', 'tag'])['score'].apply(pd.rolling_mean, 2, min_periods=2)  # window size 2

我将如何正确执行此操作?

斯科特·波士顿

达蒙:

(df.assign(moving_score=df.groupby(['name','country','tag'], as_index=False)[['score']]
                           .rolling(2, min_periods=2).mean().fillna(0)
                           .reset_index(0, drop=True)))

输出:

         date name country   tag  cat   score  moving_score
0  2017-05-21    X      US  free    4  0.0573       0.00000
1  2017-05-22    X      US  free    4  0.0626       0.05995
2  2017-05-23    X      US  free    4  0.0584       0.06050
3  2017-05-24    X      US  free    4  0.0563       0.05735
4  2017-05-21    X      MX  free    4  0.0537       0.00000
5  2017-05-22    X      MX  free    4  0.0640       0.05885
6  2017-05-23    X      MX  free    4  0.0648       0.06440
7  2017-05-24    X      MX  free    4  0.0668       0.06580

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章