基于Python DataFrame按周(周一至周日)统计Top值时间段
按周一至周日周周期统计Sum排名靠前的姓名
代码实现
import pandas as pd # 构造原始数据 df = pd.DataFrame({ 'Date': ['2022-12-01', '2022-12-01', '2022-12-03', '2022-12-04'], 'Name': ['James', 'Tom', 'James', 'Adam'], 'Sum': [10, 4, 5, 8] }) # 转换日期格式并生成周起始日期(周一为每周第一天) df['Date'] = pd.to_datetime(df['Date']) df['周起始日期'] = df['Date'] - pd.to_timedelta(df['Date'].dt.weekday, unit='D') # 按周和姓名分组求和,再按周内Sum降序排名 weekly_summary = df.groupby(['周起始日期', 'Name'])['Sum'].sum().reset_index() weekly_summary['排名'] = weekly_summary.groupby('周起始日期')['Sum'].rank(ascending=False, method='min').astype(int) # 排序后得到结果 final_result = weekly_summary.sort_values(['周起始日期', '排名']).reset_index(drop=True) print(final_result)
中文预期输出
| 周起始日期 | 姓名 | Sum | 排名 |
|---|---|---|---|
| 2022-11-28 | James | 15 | 1 |
| 2022-11-28 | Adam | 8 | 2 |
| 2022-11-28 | Tom | 4 | 3 |
说明:所有日期均归属到周一为起始的周周期内,先计算每个姓名在对应周的Sum总和,再按总和降序生成排名。
内容的提问来源于stack exchange,提问作者Mash
相关产品推荐
相关产品推荐

