将单元格值映射或替换为表中相应的字符串值

2024-05-16 00:35:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含“pid”、“代码”、“类型”和“注释”列的数据框架。每个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

输出:

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'])

但这只给了我分组:

输出:

code  type  note
A     alvedon
B     pain
C     ulcer

Tags: 数据代码框架患者id类型typecode
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

这是一种方式。您可以删除重复项并构建组合格式。然后通过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

相关问题 更多 >