如何对Pandas DataFrame按name和周分组并计算周度滚动浏览量?
解决方法
首先处理日期格式,再按name分组计算不同周期的滚动累计浏览量,具体实现如下:
import pandas as pd # 原始数据 dfx = pd.DataFrame({ "name": ["bag","bag","bag","phone","phone","phone"], "date": ["2022-11-14 00:00:00","2022-11-21 00:00:00","2022-11-28 00:00:00", "2022-11-14 00:00:00","2022-11-21 00:00:00","2022-11-28 00:00:00"], "view": [80,90,100,200,400,450] }) # 将日期转换为datetime类型,确保时间序列处理正常 dfx['date'] = pd.to_datetime(dfx['date']) # 按name分组,计算1/2/3周的滚动累计浏览量,取每个分组最后一行的结果 result = dfx.groupby('name')['view'].agg( one_week_view=lambda x: x.rolling(1).sum().iloc[-1], two_weeks_view=lambda x: x.rolling(2).sum().iloc[-1], three_weeks_view=lambda x: x.rolling(3).sum().iloc[-1] ).reset_index() print(result)
输出结果:
name one_week_view two_weeks_view three_weeks_view 0 bag 80 170 270 1 phone 200 600 1050
补充说明:
- 由于原始数据中每个
name对应的日期是连续周度数据,直接用rolling(n)即可计算前n周的累计和,取分组最后一行就是截止到最后一周的n周累计值。 - 若日期并非严格周度连续,可先通过
dfx['week'] = dfx['date'].dt.isocalendar().week提取周数,按name和week分组求和后,再执行滚动累计操作。
内容的提问来源于stack exchange,提问作者keymeans
相关产品推荐
相关产品推荐

