将Pandas数据帧重塑为多级列

3
我有一个像这样的数据框架:
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() 但没有成功。

1
请参考第7个问题。如果您想在列上使用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
1个回答

1
使用pandas.pivot_table
pd.pivot_table(df, index='id', columns=['mod', 'qid'], aggfunc='first')

输出

    ans
mod a       b
qid 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接