您可以使用set_index 将type 和id 列移动到索引中,
然后unstack 将type 索引级别移动到列索引中。您不必担心 v 值 - 索引所在的位置决定了值的排列。
结果是一个带有a MultiIndex 列索引的DataFrame:
In [181]: df.set_index(['type', 'id']).unstack(['type'])
Out[181]:
v1 v2
type A B A B
id
1 6 4 9 2
2 3 3 7 6
通常,MultiIndex 比扁平列索引更可取。
它为您提供了更好的方法来根据type 或v 值选择或操作数据。
如果您希望重新排列列以完全匹配所需输出中显示的顺序,您可以使用df.reindex:
df = df.reindex(columns=sorted(df.columns, key=lambda x: x[::-1]))
产量
v1 v2 v1 v2
type A A B B
id
1 6 9 4 2
2 3 7 3 6
如果您希望将列索引展平为单个级别,那么
df.columns = ['{}_{}'.format(t, v) for v,t in df.columns]
产量
A_v1 A_v2 B_v1 B_v2
id
1 6 9 4 2
2 3 7 3 6