1

假设我有来自重复测量研究的数据集,如下所示:

   control  dose_high  dose_low gender  participant
0        4          6         4      m            1
1        3          5         5      f            2
2        2          8         6      m            3

为了分析这些数据,我想将其转换为堆叠格式,将性别作为协变量:

stacked = df[['dose_high', 'dose_low', 'control']].stack()
df2 = stacked.reset_index()
print df.merge(df2, how='outer', left_index=True, right_index=False, right_on="level_0")[['gender', 'participant', 'level_1', 0]]

这会产生正确的结果:

   gender  participant    level_1  0
0      m            1  dose_high  6
1      m            1   dose_low  4
2      m            1    control  4
3      f            2  dose_high  5
4      f            2   dose_low  5
5      f            2    control  3
6      m            3  dose_high  8
7      m            3   dose_low  6
8      m            3    control  2

但是,这感觉是一种相当糟糕的方法。有没有我想念的更清洁的方法?

4

1 回答 1

2

你可以融化 DataFrame

import io
import pandas as pd

text = '''\
control  dose_high  dose_low gender  participant
0      4          6         4      m            1
1      3          5         5      f            2
1      2          8         6      m            3'''

df = pd.read_csv(io.BytesIO(text), sep='\s+')
result = pd.melt(df, id_vars=['participant', 'gender'])
print(result)

产量

   participant gender   variable  value
0            1      m    control      4
1            2      f    control      3
2            3      m    control      2
3            1      m  dose_high      6
4            2      f  dose_high      5
5            3      m  dose_high      8
6            1      m   dose_low      4
7            2      f   dose_low      5
8            3      m   dose_low      6
于 2013-05-23T01:02:53.197 回答