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

如何合并dfICU与dfPts并透视,显示所有ICU单元的频次(含0值)

解决方法

你的代码只用到了dfPts里出现过的ICU单元,自然没法包含dfICU里的全部ICU。要解决这个问题,核心是先让每一条就诊记录(PtsID+VisitID)都和所有ICU单元做匹配,然后再透视,具体步骤如下:

  1. 生成就诊记录与所有ICU的完整组合
    先提取dfPts中唯一的就诊标识对(PtsID、VisitID),再和dfICU做交叉连接,确保每条就诊记录都对应所有ICU:
import pandas as pd

unique_visits = dfPts[['PtsID', 'VisitID']].drop_duplicates()
full_matches = unique_visits.merge(dfICU, how='cross')
  1. 合并原始频次数据并补0
    把上面的完整组合和dfPts合并,把已有频次填充进去,没有记录的ICU直接补0:
merged_data = full_matches.merge(
    dfPts[['PtsID', 'VisitID', 'ICU', 'Frequency']],
    on=['PtsID', 'VisitID', 'ICU'],
    how='left'
).fillna({'Frequency': 0})
  1. 透视生成目标表格
    最后做透视,行设为PtsID和VisitID,列是ICU,值取Frequency:
final_df = merged_data.pivot(
    index=['PtsID', 'VisitID'],
    columns='ICU',
    values='Frequency'
).reset_index()

完整代码

import pandas as pd

# 生成所有就诊-ICU组合
unique_visits = dfPts[['PtsID', 'VisitID']].drop_duplicates()
full_matches = unique_visits.merge(dfICU, how='cross')

# 合并原始数据并填充缺失值
merged_data = full_matches.merge(
    dfPts[['PtsID', 'VisitID', 'ICU', 'Frequency']],
    on=['PtsID', 'VisitID', 'ICU'],
    how='left'
).fillna({'Frequency': 0})

# 透视得到结果
final_df = merged_data.pivot(
    index=['PtsID', 'VisitID'],
    columns='ICU',
    values='Frequency'
).reset_index()

这样处理后,结果里就会包含dfICU中的所有ICU单元,没出现的就诊-ICU组合频次自动显示0。

内容的提问来源于stack exchange,提问作者asmgx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 22:42:16