按国家分组将每日数据聚合为周均值数据的解决方案
按国家分组计算周度StringencyIndex均值的解决方案
嘿,这个需求其实用Pandas(Python)或者SQL都能轻松实现,核心就是先按国家分组,再对每个组内的日期做周级聚合计算均值。我给你分两种常用场景详细说:
场景1:用Python Pandas处理本地数据集
假设你的数据已经加载成Pandas DataFrame了,步骤如下:
- 先把日期列转换成datetime类型(这是按时间聚合的前提,必须做!)
- 按「国家+周」分组,计算StringencyIndex的均值
代码示例
import pandas as pd # 1. 读取并预处理数据(假设你的数据是CSV格式) df = pd.read_csv('your_dataset.csv') df['Date'] = pd.to_datetime(df['Date']) # 转换日期格式 # 2. 按国家和周分组计算均值(两种方式可选) # 方式一:用to_period直接生成周标签(默认周日为周结束,可自定义) weekly_avg = df.groupby( ['Country', df['Date'].dt.to_period('W')] # 改成'W-MON'可将周一设为周结束 )['StringencyIndex'].mean().reset_index() # 方式二:用ISO年+周数分组(避免跨年周混淆,更严谨) weekly_avg = df.groupby( ['Country', df['Date'].dt.isocalendar().year, df['Date'].dt.isocalendar().week] )['StringencyIndex'].mean().reset_index() # 重命名列名更直观 weekly_avg.rename(columns={'year': 'Year', 'week': 'Week'}, inplace=True)
结果说明
拿你给出的Aruba数据举例,2020-01-01到2020-01-06都属于2020年第1周(ISO周规则),计算后的周均值就是0,完全符合预期。
场景2:用SQL处理数据库中的数据
如果你的数据存在数据库(比如PostgreSQL、MySQL)里,直接用SQL分组聚合更高效:
PostgreSQL示例
SELECT Country, DATE_TRUNC('week', "Date") AS Week_Start_Date, -- 生成周起始日期 AVG(StringencyIndex) AS Weekly_Stringency_Index FROM your_table GROUP BY Country, DATE_TRUNC('week', "Date") ORDER BY Country, Week_Start_Date;
MySQL示例
MySQL里用WEEK()函数或者DATE_FORMAT实现:
SELECT Country, DATE_FORMAT(`Date`, '%Y-%u') AS Year_Week, -- 格式化为"年-周数"格式 AVG(StringencyIndex) AS Weekly_Stringency_Index FROM your_table GROUP BY Country, Year_Week ORDER BY Country, Year_Week;
这两种方式都能完美实现你要的「按国家划分的周度StringencyIndex」需求~
内容的提问来源于stack exchange,提问作者laser.p
相关产品推荐
相关产品推荐

