如何用Pandas按日期汇总各国疫情数据并合并为单表?
问题描述
用户有如下疫情数据(示例):
Date_reported Country_code Country WHO_region New_cases Cumulative_cases New_deaths Cumulative_deaths 0 2020-01-03 AF Afghanistan EMRO 0 0 0 0 1 2020-01-04 AF Afghanistan EMRO 0 0 0 0 2 2020-01-05 AF Afghanistan EMRO 0 0 0 0 3 2020-01-06 AF Afghanistan EMRO 0 0 0 0 4 2020-01-07 AF Afghanistan EMRO 0 0 0 0 ... ... ... ... ... ... ... ... ... 243868 2022-10-23 ZW Zimbabwe AFRO 0 257893 0 5606 243869 2022-10-24 ZW Zimbabwe AFRO 0 257893 0 5606 243870 2022-10-25 ZW Zimbabwe AFRO 0 257893 0 5606 243871 2022-10-26 ZW Zimbabwe AFRO 0 257893 0 5606 243872 2022-10-27 ZW Zimbabwe AFRO 0 257893 0 5606
需要将所有国家的数据按日期合并,生成如下格式的汇总表格:
Date_reported New_cases Cumulative_cases New_deaths Cumulative_deaths 0 2020-01-03 0 0 0 0 1 2020-01-04 0 0 0 0 2 2020-01-05 0 0 0 0 3 2020-01-06 0 0 0 0 4 2020-01-07 0 0 0 0 ... ... ... ... ... ... ... ... ... 243872 2022-10-27 sum of all country
询问如何使用Pandas实现该需求。
解决方案
可以通过Pandas的groupby结合聚合函数快速实现日期维度的全局数据汇总,具体步骤如下:
导入Pandas并读取数据
先确保已安装Pandas,然后读取你的数据集(假设数据存储在CSV文件中):import pandas as pd # 替换为你的数据文件路径 df = pd.read_csv('your_data.csv')按日期分组并聚合数值列
以Date_reported为分组键,对需要汇总的数值列执行聚合操作:# 按日期分组,对目标列求和 aggregated_df = df.groupby('Date_reported')[['New_cases', 'Cumulative_cases', 'New_deaths', 'Cumulative_deaths']].sum().reset_index()groupby('Date_reported'):将数据按日期维度分组[['New_cases', ...]]:指定需要聚合的数值型列.sum():对每组内的数值列求和,得到当日全球累计/新增数据.reset_index():将分组的日期从索引转为普通列,匹配目标格式
查看或保存结果
可以直接打印结果预览,或保存为新文件:# 打印前5行验证 print(aggregated_df.head()) # 保存汇总结果到CSV aggregated_df.to_csv('daily_global_summary.csv', index=False)
补充说明
如果原始数据中的Cumulative_cases和Cumulative_deaths本身是各国截至当日的累计值,直接求和会导致重复计算,此时应该取每组的最大值(即当日全球最高累计值,或理解为当日全球累计总和的正确统计方式),代码调整为:
aggregated_df = df.groupby('Date_reported').agg({ 'New_cases': 'sum', 'Cumulative_cases': 'max', 'New_deaths': 'sum', 'Cumulative_deaths': 'max' }).reset_index()
内容的提问来源于stack exchange,提问作者IsaacMak
相关产品推荐
相关产品推荐

