[英]Merging two DataFrames with multiple rows for the same key
我将医疗数据分成两个不同的 CSV,我需要合并它们。 一个数据集包含基本的人口统计信息,第二个数据集包含诊断代码。 每个患者都分配有一个名为 INC_KEY 的唯一标识号,我已将其简化为简单数字,如本例所示:
df1:
INC_KEY SEX AGE
1 F 40
2 F 24
3 M 66
df2:
INC_KEY DCODE
1 BW241ZZ
1 BW28ZZZ
2 0BH17EZ
3 05H633Z
2 4A103BD
3 BR30ZZZ
1 BF42ZZZ
我需要将这两个数据帧与包含三行的 output 合并,如 df1 中所示,并为该患者的每个 dcode 附加列。 像这样:
INC_KEY SEX AGE DCODE1 DCODE2 DCODE3
1 F 40 BW241ZZ BW28ZZZ BF42ZZZ
2 F 24 0BH17EZ 4A103BD N/A
3 M 66 05H633Z BR30ZZZ N/A
我怎么能go一下这个? 我试图进行左合并,但它没有给出我正在寻找的结果。
您可以使用.merge
组合INC_KEY
列上的两个数据帧。 然后,您可以使用.groupby()
和pd.concat()
将单独的行转换为所需的列。 最后,您可以使用.drop()
删除原始的"DCODE"
列:
df = df1.merge(df2, on="INC_KEY", how="right")
df = df.groupby(["INC_KEY", "SEX", "AGE"]).agg({"DCODE": list}).reset_index()
df = pd.concat(
(df, pd.DataFrame(df["DCODE"].values.tolist()).add_prefix("DCODE")),
axis=1
)
df = df.drop("DCODE", axis=1)
这输出:
INC_KEY SEX AGE DCODE0 DCODE1 DCODE2
0 1 F 40 BW241ZZ BW28ZZZ BF42ZZZ
1 2 F 24 0BH17EZ 4A103BD None
2 3 M 66 05H633Z BR30ZZZ None
这是另一种方式:
df_out = df1.merge(df2, on='INC_KEY')
df_out = df_out.set_index(['INC_KEY', 'SEX', 'AGE', df_out.groupby('INC_KEY').cumcount()]).unstack()
df_out.columns = [f'{i}{j}' for i, j in df_out.columns]
df_out.reset_index()
Output:
INC_KEY SEX AGE DCODE0 DCODE1 DCODE2
0 1 F 40 BW241ZZ BW28ZZZ BF42ZZZ
1 2 F 24 0BH17EZ 4A103BD NaN
2 3 M 66 05H633Z BR30ZZZ NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.