首页 > 解决方案 > 如何将 ID 分组在一列中并放入新列?

问题描述

我有一个看起来像这样的数据框:

人力资源 O2Sat 温度 舒张压 响应 P_ID
96 99.2 36.50 60.0 10.0 1
95 100.0 39.50 68.5 12.0 1
110 85.8 37.95 58.5 19.2 2
100 95.5 35.45 45.9 11.5 2
89 98.0 38.10 65.4 10.5 3
98 100.0 36.50 49.5 15.8 3
102 100.0 37.45 60.0 16.0 4
115 95.0 38.05 55.8 14.5 4

我想在单个 ID(ID = 1)下有第一两行(P_ID = 1),依此类推。因此,当我根据患者 ID 进行分析时,它会将具有该 ID 的所有行视为一个组,而不是将它们作为单独的行处理。像这样: 图片

我怎么能这样做?请帮忙。


更新

这将是我想要的数据框输出。这是来自 PhysioNet Sepsis Challenge 2019 的时间序列数据。我将每一行视为一个单独的患者。但这不是一个好方法。无论患者有多少条目(行),我都希望对患者进行明智的分析。不将单个行视为单独的患者,而是将单个行视为具有唯一 ID 的该患者的数据。

wd

标签: pythonpandasdataframe

解决方案


您想要获得的输出称为Multi-index数据框。正如您提到的数据来自PhysioNet Sepsis Challenge 2019,有一列ICULOS是每个患者的重要信息。您也可以将数据框转换为包含此列的多索引数据框。如下所示:

假设您包含以下列ICULOS

人力资源 O2Sat 温度 舒张压 响应 P_ID 伊库洛斯
96 99.2 36.50 60.0 10.0 1 1
95 100.0 39.50 68.5 12.0 1 2
110 85.8 37.95 58.5 19.2 2 1
100 95.5 35.45 45.9 11.5 2 2
89 98.0 38.10 65.4 10.5 3 1
98 100.0 36.50 49.5 15.8 3 2
102 100.0 37.45 60.0 16.0 4 1
115 95.0 38.05 55.8 14.5 4 2

只需这样做:

df1 = df.set_index(["P_ID", "ICULOS"])
df1.head()
# Output:
                   HR   O2Sat   Temp    DBP     Resp
P_ID    ICULOS                  
1          1       96   99.2    36.50   60.0    10.0
           2       95   100.0   39.50   68.5    12.0
2          1       110  85.8    37.95   58.5    19.2
           2       100  95.5    35.45   45.9    11.5
3          1       89   98.0    38.10   65.4    10.5

这样你就可以进行分析了。


推荐阅读