You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 14:45:33