df = pd.DataFrame({'foo': ['two', 'two', 'two', 'one', 'one','one'],
'bar': ['B', 'A', 'C', 'B', 'A', 'C'],
'baz': [1, 2, 3, 4, 5, 6],
'zoo': ['x', 'y', 'z', 'q', 'w', 't']})
df.pivot(index='foo', columns='bar', values='baz')
bar A B C
foo
one 5 4 6
two 2 1 3
如何防止pivot
对行和列进行排序?期望的输出:
bar B A C
foo
two 1 2 3
one 4 5 6
第一个想法是使用 ordered Categorical
,所以pivoting
返回正确的排序:
df['foo'] = pd.Categorical(df['foo'], ordered=True, categories=df['foo'].unique())
df['bar'] = pd.Categorical(df['bar'], ordered=True, categories=df['bar'].unique())
df1 = df.pivot(index='foo', columns='bar', values='baz')
print (df1)
bar B A C
foo
two 1 2 3
one 4 5 6
或者可以通过以下方式更改订单DataFrame.reindex
:
df1 = (df.pivot(index='foo', columns='bar', values='baz')
.reindex(index=df['foo'].unique(), columns=df['bar'].unique()))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句