我有一个像这样的数据框架:
这在 Pandas 中是否可行?我尝试了
df = pd.DataFrame(
{
"id": [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4],
"mod": ["a", "a", "b", "b"] * 4,
"qid": [11, 12, 13, 14] * 4,
"ans": ["Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L", "K"],
}
)
df
id mod qid ans
0 1 a 11 Z
1 1 a 12 Y
2 1 b 13 X
3 1 b 14 W
4 2 a 11 V
5 2 a 12 U
6 2 b 13 T
7 2 b 14 S
8 3 a 11 R
9 3 a 12 Q
10 3 b 13 P
11 3 b 14 O
12 4 a 11 N
13 4 a 12 M
14 4 b 13 L
15 4 b 14 K
每个 qid 的值完全适合于 mod。例如,qid=11 仅出现在 mod=a 中。
我希望将数据重塑为宽格式,其中 mod 和 qid 作为列级别。
a b
11 12 13 14
id
1 Z Y X W
2 V U T S
3 R Q P O
4 N M L K
这在 Pandas 中是否可行?我尝试了
pivot()
但没有成功。
MultiIndex
,您应该使用pivot_table
:df.pivot_table(index='id', columns=['mod', 'qid'], values='ans', aggfunc='first')
。另一个选项是先设置索引,然后解除堆叠,因为这只是一种重塑而不是真正的聚合:df.set_index(['id', 'mod', 'qid'])['ans'].unstack([-2,-1])
。 - ALollz