我有以下数据框:
df
resid familyid age
54 -0.855952 1028/2 39
55 -0.733972 1028/2 40
56 -0.821011 1028/2 41
57 -0.759187 1028/2 42
58 -0.753066 1028/2 43
65 1.268154 1028/2 35
66 1.214893 1028/2 36
...etc
resid 包含N个浮点数。 familyid 包含不同的标识符(键),如上所示,age包含10个值:从35到44.每个 familyid 在此数据中表示两次(即它们是兄弟姐妹),我希望将此数据帧转换为2 * 10列数据帧,其中:
第一列包含第一个 age 35个兄弟姐妹的所有 resid 值,第二列包含第二个 resid 值em> age 35个兄弟姐妹,第三列包含第一个 age 36兄弟等的所有 resid 值。
我希望这很清楚。谢谢
答案 0 :(得分:2)
这样做的一种方法是tag
每个兄弟姐妹为1
(第一个)或2
(第二个),然后转动;例如以
>>> df
resid familyid age
0 -0.86 1028/2 39
1 -0.73 1028/2 40
2 -0.82 1028/2 41
3 -0.76 1028/2 42
4 -0.75 1028/2 43
5 1.27 1028/2 35
6 1.21 1028/2 36
7 1.71 1028/2 39
8 1.47 1028/2 40
9 1.64 1028/2 41
10 1.52 1028/2 42
11 1.51 1028/2 43
12 -2.54 1028/2 35
13 -2.43 1028/2 36
标记部分可以通过
完成>>> tagfn = lambda x: 1 + np.arange(len(x))
>>> df['tag'] = df.groupby(['familyid', 'age']).transform(tagfn)
然后:
>>> df.pivot_table('resid', 'familyid', ['age', 'tag'])
age 35 36 39 40 41 42 43
tag 1 2 1 2 1 2 1 2 1 2 1 2 1 2
familyid
1028/2 1.27 -2.54 1.21 -2.43 -0.86 1.71 -0.73 1.47 -0.82 1.64 -0.76 1.52 -0.75 1.51
[1 rows x 14 columns]