Python Pandas按周/月聚合表内新冠疫情统计数据方法咨询
Pandas 处理美国新冠统计数据集实现方案
1. 前置数据预处理
首先需要将字符串格式的日期字段转换为Pandas可识别的时间类型,同时可以提前筛选出阳性结果子集方便后续查询:
import pandas as pd # 读取原始数据集,替换为你实际的文件路径 df = pd.read_csv("covid_daily_stats.csv") # 转换日期字段为datetime类型,后续时间聚合的必备前提 # 按你实际的日期格式调整format参数,常见格式为%Y-%m-%d df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
注意:如果你的数据集里
overall_outcome字段的阳性标识不是Positive,请替换为实际对应的值,否则筛选结果会为空。
2. 按州维度聚合每日新增结果总和
按州+日期分组直接聚合即可:
# 聚合所有结果类型的每日各州新增总数 daily_state_all = df.groupby( ['state_name', 'date'], as_index=False )['new_results_reported'].sum() # 如果只需要聚合阳性结果,用下面的代码即可 daily_state_positive = df[df['overall_outcome'] == 'Positive'].groupby( ['state_name', 'date'], as_index=False )['new_results_reported'].sum()
3. 可切换周/月维度的聚合通用函数
封装通用函数支持灵活调整时间维度、筛选指定州和结果类型:
def agg_by_time_dimension(df, time_dim='M', state=None, outcome_type=None): """ 按指定时间维度聚合数据 参数说明: - df: 输入数据集 - time_dim: 时间维度,可选 'W'(按周)、'M'(按月)、'Q'(按季度),符合Pandas offset规范即可 - state: 可选参数,指定要查询的州名,例如'Alabama',不传则返回所有州聚合结果 - outcome_type: 可选参数,指定结果类型,例如'Positive',不传则返回所有类型聚合结果 """ filtered_df = df.copy() # 按指定条件筛选数据 if state: filtered_df = filtered_df[filtered_df['state_name'] == state] if outcome_type: filtered_df = filtered_df[filtered_df['overall_outcome'] == outcome_type] # 按时间维度+州分组聚合 agg_result = filtered_df.groupby( [pd.Grouper(key='date', freq=time_dim), 'state_name'], as_index=False )['new_results_reported'].sum() # 格式化时间周期字段方便查看 if time_dim == 'M': agg_result['period'] = agg_result['date'].dt.strftime('%Y-%m') elif time_dim == 'W': agg_result['period'] = agg_result['date'].dt.strftime('%Y-%m-%d') + ' 起一周' return agg_result
4. 需求示例:查询阿拉巴马州单月全部阳性结果统计
直接调用上述封装函数即可实现需求:
# 聚合阿拉巴马州按月统计的所有阳性结果 alabama_monthly_positive = agg_by_time_dimension( df, time_dim='M', state='Alabama', outcome_type='Positive' ) # 如需查询某一具体月份的结果,比如2020年4月,再加一层筛选即可 alabama_202004_positive = alabama_monthly_positive[alabama_monthly_positive['period'] == '2020-04']
内容的提问来源于stack exchange,提问作者Work_fl0w
相关产品推荐
相关产品推荐

