遍历Pandas数据帧以构建新的数据帧



我有一个数据框架,其中包含不同患者在数小时内的各种医疗测量结果(在本例中为2(。例如,数据帧是这样的:

patientid  hour measurementx measurementy
1          1    13.5         2030
1          2    13.9         2013
2          1    11.5         1890
2          2    14.9         2009  

现在,我需要构建一个新的数据框架,基本上对每个患者的所有测量进行分组,它看起来像这样:

patientid  hour measurementx measurementy  hour  measurementx measurementy
1          1    13.5         2030          2     13.9         2013
2          1    11.5         1890          2     14.9         2009

我是Python的新手,我一直在努力完成这个简单的操作,我一直尝试这样的操作,试图将数据帧x_binary_compact与我的数据x_binary 连接起来

old_id = 1
for row in x_binary.itertuples(index = False):
new_id = row[0]
if new_id == old_id:
pd.concat(x_binary_compact, row, axis=1)
else:
old_id = new_id
pd.concat(x_binary_compact, row, axis=0)

但我有

类型错误:concat((为参数"axis"获取了多个值

我知道我最初的想法可能不对,所以任何其他可能的解决方案都可以

我建议对数据帧进行透视,并将所有值放入列表中。

df = pd.DataFrame(data={'id': [1, 1, 2, 2], 'hour': [1, 2, 1, 2], 'measurement': [1, 2, 3, 4]})
df.pivot_table(index='id', aggfunc=list)
df.reset_index(drop=True, inplace=True)
print(df)
hour measurement
id                    
1   [1, 2]      [1, 2]
2   [1, 2]      [3, 4]

并获取特定id的值:

id = 1
print(df.loc[id, 'measurement'].values)

如果df是您的数据帧,您可以尝试

df_result = pd.concat(
[sdf for _, sdf in df.set_index("patientid", drop=True).groupby("hour")],
axis=1
)

结果

df =
patientid  hour  measurementx  measurementy
0          1     1          13.5          2030
1          1     2          13.9          2013
2          2     1          11.5          1890
3          2     2          14.9          2009

hour  measurementx  measurementy  hour  measurementx  measurementy
patientid                                                                    
1             1          13.5          2030     2          13.9          2013
2             1          11.5          1890     2          14.9          2009

最新更新