df = pd.DataFrame(data={'i1':['x','x','x','x','y','y','y','y'], 'i2':['f','a','w','h','f','a','w','h'], 'c1':np.random.randn(8),'c2':np.random.randn(8)})
df.set_index(['i1','i2'],inplace=True)

df.unstack('i2')按字母顺序对i2中的列名进行排序。如何防止这种排序并保持原始序列?

最佳答案

您可以使用ordered Categorical

df['i2'] = pd.Categorical(df.i2, categories=['f', 'a', 'w', 'h'], ordered=True)

df.set_index(['i1','i2'],inplace=True)
print (df)

print (df.unstack('i2'))
          c1                                      c2                      \
i2         f         a         w         h         f         a         w
i1
x  -0.663218  1.005395  0.236088  1.416896  2.729855  0.141692  0.136700
y   0.509393  0.370418 -1.301840 -1.067212  0.945016 -0.617570  1.377235


i2         h
i1
x  -0.029020
y  -2.346038

关于python - 防止对 Pandas 中的列名称进行排序-python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38241835/

10-11 15:24