我有一个带有两个ID变量的pandas数据框:
df = pd.DataFrame({'id': [1,1,1,2,2,3],
'num': [10,10,12,13,14,15],
'q': ['a', 'b', 'd', 'a', 'b', 'z'],
'v': [2,4,6,8,10,12]})
id num q v
0 1 10 a 2
1 1 10 b 4
2 1 12 d 6
3 2 13 a 8
4 2 14 b 10
5 3 15 z 12
我可以使用以下代码旋转表格:
df.pivot('id','q','v')
最后得到类似这样的东西:
q a b d z
id
1 2 4 6 NaN
2 8 10 NaN NaN
3 NaN NaN NaN 12
然而,我真正想要的是(未熔化的原始形式):
id num a b d z
1 10 2 4 NaN NaN
1 12 NaN NaN 6 NaN
2 13 8 NaN NaN NaN
2 14 NaN 10 NaN NaN
3 15 NaN NaN NaN 12
换句话说:
- 'id'和'num'是我的索引(通常情况下,我只看到'id'或'num'是索引,但我需要两者都是索引,因为我尝试检索原始的未融合形式)
- 'q'是我的列
- 'v'是表中的值
更新
我在Wes McKinney的博客中找到了一个相近的解决方案:
df.pivot_table(index=['id','num'], columns='q')
v
q a b d z
id num
1 10 2 4 NaN NaN
12 NaN NaN 6 NaN
2 13 8 NaN NaN NaN
14 NaN 10 NaN NaN
3 15 NaN NaN NaN 12
然而,该格式与我上面所想要的格式有些不同。
del df2.columns.name
。 - Walker Hale IV