我有一个数据框架,其中包含不同患者在数小时内的各种医疗测量结果(在本例中为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