我有一个包含“pid”,“code”,“type”和“note”列的数据框。每个pid(患者id)与诊断和医学相结合。它们都有代码和注释(参见示例)。每个代码都有几个注释。如何用相应的第一个看到的音符和类型替换所有代码?执行for循环不是一种选择。
请注意,例如,代码A在IN中同时具有alvedon和ipren,但在OUT中只有alvedon。这样做,我可以通过名称而不是代码来识别它们。
在:
pid code type note
1 A M alvedon
1 B D pain
1 C M ulcer
2 A M ipren
2 B D hurt
3 A M alvedon
3 B D hurt
3 C M stomach
4 A M ipren
4 B D pain
5 A M ipren
5 B D pain
OUT:
pid code
1 A_M_alvedon
1 B_D_pain
1 C_M_ulcer
2 A_M_alvedon
2 B_D_pain
3 A_M_alvedon
3 B_D_pain
3 C_M_ulcer
4 A_M_alvedon
4 B_D_pain
5 A_M_alvedon
5 B_D_pain
我到目前为止:
df.groupby('code').note.agg(['first'])
但这只能给我分组:
OUT:
code type note
A alvedon
B pain
C ulcer
答案 0 :(得分:2)
你可以连接,然后像你正在做的那样对代码进行分组,然后转换:
In [9]: df["out"] = (
(df["code"] + "_" + df["type"] + "_" + df["note"]).groupby(df["code"]).transform("first"))
In [10]: df
Out[10]:
pid code type note out
0 1 A M alvedon A_M_alvedon
1 1 B D pain B_D_pain
2 1 C M ulcer C_M_ulcer
3 2 A M ipren A_M_alvedon
4 2 B D hurt B_D_pain
5 3 A M alvedon A_M_alvedon
6 3 B D hurt B_D_pain
7 3 C M stomach C_M_ulcer
8 4 A M ipren A_M_alvedon
9 4 B D pain B_D_pain
10 5 A M ipren A_M_alvedon
11 5 B D pain B_D_pain
答案 1 :(得分:1)
这是一种方式。您可以删除重复项并构建组合格式。然后按code
映射到原始数据框。
df2 = df.drop_duplicates('code')
df2['comb'] = df2['code'] + '_' + df2['type'] + '_' + df2['note']
df['code'] = df['code'].map(df2.set_index('code')['comb'])
df = df[['pid', 'code']]
# pid code
# 0 1 A_M_alvedon
# 1 1 B_D_pain
# 2 1 C_M_ulcer
# 3 2 A_M_alvedon
# 4 2 B_D_pain
# 5 3 A_M_alvedon
# 6 3 B_D_pain
# 7 3 C_M_ulcer
# 8 4 A_M_alvedon
# 9 4 B_D_pain
# 10 5 A_M_alvedon
# 11 5 B_D_pain