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

标签 python pandas dataframe

我有一个包含“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

输出:

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

最佳答案

您可以像您正在做的那样对代码进行连接,然后进行分组,然后进行转换:

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

关于python - 将单元格值映射或替换为 pandas 中相应的字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49283249/

相关文章:

Python 查找时间在列表中不连续

python - SocketIO + Flask 检测断线

python - 基于列标题的新数据框

python - 添加额外的列作为累积时间差: a complex case

r - 从汇总的 df 创建原始选择数据框

r - 将数据帧的名称传递到 r 中的循环中

python - 如何根据 Python 中另一列的条件复制字段?

python - 按可以为 None 的属性排序

python - 扫描数据帧的行以获取特定值

python - Pandas:将 pytz.FixedOffset 应用于系列