为了账号安全,请及时绑定邮箱和手机立即绑定

熊猫滚动均值与 GroupBy 和 Sort

熊猫滚动均值与 GroupBy 和 Sort

三国纷争 2021-08-05 10:35:33
我有一个如下所示的 DataFrame:f_period f_year f_month subject month year value20140102 2014   1      a        1     2018 1020140109 2014   1      a        1     2018 1220140116 2014   1      a        1     2018 820140202 2014   2      a        1     2018 2020140209 2014   2      a        1     2018 1520140102 2014   1      b        1     2018 1020140109 2014   1      b        1     2018 1220140116 2014   1      b        1     2018 820140202 2014   2      b        1     2018 2020140209 2014   2      b        1     2018 15的f_period为SKU(列预测时的日期subject)制成。的month和year列是该预测被做了周期。例如,第一行表示 on 01/02/2018,该模型预测要在year of year 中设置10产品单位。a12018我正在尝试通过subject, by monthfor 2创建滚动平均预测f_months。DataFrame 应如下所示:f_period f_year f_month subject month year value mnthly_avg rolling_2_avg20140102 2014   1      a        1     2018 10    10         1320140109 2014   1      a        1     2018 12    10         1320140116 2014   1      a        1     2018 8     10         1320140202 2014   2      a        1     2018 20    17.5       null20140209 2014   2      a        1     2018 15    17.5       null20140102 2014   1      b        1     2018 10    10         1320140109 2014   1      b        1     2018 12    10         1320140116 2014   1      b        1     2018 8     10         1320140202 2014   2      b        1     2018 20    17.5       null20140209 2014   2      b        1     2018 15    17.5       null我尝试过的事情:我能够mnthly_avg通过:data_df['monthly_avg'] = data_df.groupby(['f_month', 'f_year', 'year', 'month', 'period', 'subject']).\        value.transform('mean')这给了我意想不到的输出。我不明白它是如何计算值的rolling_2_avg我如何GROUP BYsubject和month再排序f_month,然后取平均值未来两月的平均水平?
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

除非我误解了它似乎比你所做的更简单。那这个呢?


grp = pd.DataFrame(df.groupby(['subject', 'month', 'f_month'])['value'].sum())

grp['rolling'] = grp.rolling(window=2).mean()

grp

输出:


                          value rolling

subject     month   f_month         

a              1    1       30  NaN

               2            35  32.5

b              1    1       30  32.5

               2            35  32.5


查看完整回答
反对 回复 2021-08-05
?
月关宝盒

TA贡献1772条经验 获得超5个赞

我对乔希的解决方案会有点小心。如果您想按主题分组,则不能使用这样的滚动功能,因为它会跨主题滚动(即它最终会从主题 A 和 B 中取一个月的平均值,而不是给出您可能更喜欢的空值)。


另一种方法是拆分数据帧并单独运行滚动(我注意到您希望在数据帧末尾获得空值,而您可能希望在前后对数据帧进行排序):


for unique_subject in df['subject'].unique():

    df_subject = df[df['subject'] == unique_subject]

    df_subject['rolling'] = df_subject['value'].rolling(window=2).mean()

    print(df_subject) # just to print, you may wanna concatenate these


查看完整回答
反对 回复 2021-08-05
  • 2 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号