基于唯一列值合并两个Pandas DataFrame生成患者KPI全组合
实现方法
你需要的是去重后的患者列表和KPI列表的笛卡尔积,有两种常用实现方案:
方案1:通用兼容版(支持所有Pandas版本)
通过添加临时辅助列做等值连接实现交叉匹配,代码如下:
import pandas as pd # 你的原始数据 df_patient = pd.DataFrame([['P1'], ['P2'], ['P1'], ['P3']], columns = ['Patient']) df_KPI = pd.DataFrame([['KPI1'], ['KPI2'], ['KPI3'], ['KPI4']], columns = ['KPI']) # 第一步:先得到唯一的患者列表 unique_patient = df_patient.drop_duplicates(subset=['Patient']) # 添加临时同值列,用于笛卡尔积匹配 unique_patient['tmp'] = 1 df_KPI['tmp'] = 1 # 匹配后删除临时列 df_output = pd.merge(unique_patient, df_KPI, on='tmp').drop('tmp', axis=1)
方案2:简洁版(Pandas 1.2.0及以上版本支持)
直接用Pandas内置的交叉连接参数how='cross',无需额外添加临时列:
import pandas as pd df_patient = pd.DataFrame([['P1'], ['P2'], ['P1'], ['P3']], columns = ['Patient']) df_KPI = pd.DataFrame([['KPI1'], ['KPI2'], ['KPI3'], ['KPI4']], columns = ['KPI']) unique_patient = df_patient.drop_duplicates(subset=['Patient']) df_output = unique_patient.merge(df_KPI, how='cross')
两种方法得到的df_output都和你要求的输出格式完全一致。
内容的提问来源于stack exchange,提问作者user3234112
相关产品推荐
相关产品推荐

