问题
我有一个数据框,其中包含许多地区及其各自的销售单位、执行的访问次数以及每月的平均访问次数。并非所有地区都有相同的开始日期。
所以我的 table 看起来像这样:
Region Month Visits Average_minutes Units_sold
Region_1 2018.01.01 12 2.22 120
Region_1 2018.02.01 10 2.02 108
Region_2 2017.04.01 4 1.8 60
Region_2 2017.05.01 4 1.6 56
Region_2 2017.06.01 3 1.5 58
Region_1 2018.03.01 11 2.1 103
Region_3 2018.04.01 3 2.22 20
Region_3 2018.05.01 2 2 22
Region_2 2017.07.01 6 1.7 61
Region_1 2018.04.01 14 2.1 125
Region_3 2018.06.01 3 2.3 21
Region_3 2018.07.01 3 2.4 19
Region_1 2018.05.01 10 2.12 116
Region_2 2017.08.01 3 2.1 55
我想要的是通过向前移动一个月来汇总不同地区的每月数据,频率为 3 个月。
因此,如果我们以 Region_1 为例,我希望得到的最终结果是这样的:
Region Date Visits Average_minutes Units_sold 3M_shift
Region_1 2018.01.01 33 2.11 331 0
Region_1 2018.04.01 24 2.11 241 0
Region_1 2018.02.01 35 2.07 336 1
Region_1 2018.05.01 10 2.12 116 1
Region_1 2018.02.01 35 2.07 336 2
Region_1 2018.05.01 10 2.12 116 2
正如您所看到的,日期现在包含 3 个月频率的开始日期,并且在 3M_shift 列中,我看到与第一个可用月份相比所做的转变。
当然,在上表中您只能看到 Region_1,但我希望获得所有组的结果。
更多背景
因此,我希望每个组的数据不仅聚合业务年季度的数据,而且还聚合 3 个月的频率,每次迭代向前移动一个月,直到到达最后一个月。
我的代码看起来像这样,但是这对每个区域的开始日期的月份进行分组,我真的不知道如何将开始月份移动一个并迭代到最后一个月:
grp = joined.groupby(['Region', pd.Grouper(key="Date", freq='3M')]).agg({"Visits":"sum", "Average_minutes":"mean", "Units_sold":"sum"})
例如,对于 Region_1,我得到以下结果:
Region Date Visits Average_minutes Units_sold
Region_1 2018.01.01 33 2.11 331
Region_1 2018.04.01 24 2.11 241
编辑: 添加了我想要得到的更好的可视化。
在下面的图片中你可以明白我的意思。绿色部分是我到目前为止所拥有的。我想为粉色部分做一个循环,但我不知道该怎么做。
你能帮我得到想要的结果吗?
提前非常感谢您!
最佳答案
我不是 100% 确定您在寻找什么,但以我的解释方式,也许这会有所帮助?
首先对地区和月份进行排序。
df = df.sort_values(['Region', 'Month'])
设置多重索引。
df = df.set_index(['Region', 'Month'])
然后按区域分组并应用滚动窗口进行聚合,并将其向后移动两个周期。
df = df.groupby(level='Region').apply(lambda x: x.rolling(window=3).agg({"Visits":"sum", "Average_minutes":"mean", "Units_sold":"sum"}).shift(-2))
结果是:
Visits Average_minutes Units_sold
Region Month
Region_1 2018.01.01 33.0 2.113333 331.0
2018.02.01 35.0 2.073333 336.0
2018.03.01 35.0 2.106667 344.0
2018.04.01 NaN NaN NaN
2018.05.01 NaN NaN NaN
Region_2 2017.04.01 11.0 1.633333 174.0
2017.05.01 13.0 1.600000 175.0
2017.06.01 12.0 1.766667 174.0
2017.07.01 NaN NaN NaN
2017.08.01 NaN NaN NaN
Region_3 2018.04.01 8.0 2.173333 63.0
2018.05.01 8.0 2.233333 62.0
2018.06.01 NaN NaN NaN
2018.07.01 NaN NaN NaN
关于python - pandas python 中的 3 个月聚合和转移周期分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55321559/