在R语言中用cases与deaths两个DataFrame填充main主表的方法
解决方案
步骤1:预处理病例与死亡数据
先从cases和deaths表中提取目标字段,同时处理可能的重复记录(同一地点+日期的多条数据):
import pandas as pd # 处理死亡数据:提取字段并按维度聚合 deaths_processed = deaths.groupby(['location_id', 'location', 'date']).agg( deaths=('value', 'sum'), deaths_measure=('metric', lambda x: x.iloc[0]) # 假设同一组内metric字段一致,若有差异需调整逻辑 ).reset_index() # 处理病例数据:提取字段并按维度聚合 cases_processed = cases.groupby(['location_id', 'location', 'date']).agg( cases=('value', 'sum') ).reset_index()
步骤2:合并预处理数据
用外连接合并两个表,确保不丢失仅存在病例或仅存在死亡记录的日期/地点组合:
merged_data = pd.merge( deaths_processed, cases_processed, on=['location_id', 'location', 'date'], how='outer' )
步骤3:构建并填充主表
基于合并结果生成符合目标结构的main表,同时初始化后续需填充的字段:
# 按目标列顺序重构主表 main = merged_data.reindex(columns=[ 'nid', 'location_id', 'location', 'date', 'deaths', 'deaths_measure', 'cases', 'hospitalizations', 'hospitalizations_measure', 'ICU', 'ICU_measure' ]) # 初始化待填充字段:用支持缺失值的整数类型(Int64)保留空值状态 main['nid'] = main['nid'].astype('Int64') main[['hospitalizations', 'ICU']] = main[['hospitalizations', 'ICU']].astype('Int64') main[['hospitalizations_measure', 'ICU_measure']] = None
关键补充说明
- 聚合逻辑:如果业务不需要对
value求和,可将sum替换为max/first等聚合方式;若确认无重复记录,可跳过groupby步骤直接提取字段。 - 缺失值处理:合并后
deaths或cases可能出现空值,若需填充为0,可执行main[['deaths', 'cases']] = main[['deaths', 'cases']].fillna(0)。 - 数据类型:使用
Int64而非普通int是为了在后续填充前保留缺失值状态,若不需要空值可改为int并填充0。
内容的提问来源于stack exchange,提问作者sgy0003
相关产品推荐
相关产品推荐

