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

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
添加回答
举报