pandas 的 pivot_table 似乎只按字母顺序返回列,这样
pivot_table(tips, 'tip_pct', rows=['sex', 'day'], cols='smoker', aggfunc=len)
给出:
smoker No Yes
sex day
Female Fri 2 7
Sat 13 15
Sun 14 4
Thur 25 7
Male Fri 2 8
Sat 32 27
Sun 43 15
Thur 20 10
如果我想将 Thur
放在 Fri
的上方,将 Yes
放在 No
的左侧,如何我去做吗?
最佳答案
使用 Categories ,在 pandas 0.15 中引入,'day' 和 'smoker' 列可以转换为具有预定义顺序的类别。 pivot_table() 将使它们保持排序。
>>> pt = pd.pivot_table(df, 'tip_pct', index=['sex', 'day'], columns='smoker', aggfunc=pd.np.sum)
smoker No Yes
sex day
Female Fri 0 4
Sat 0 5
Sun 0 5
Thu 9 3
Male Fri 0 4
Sat 1 5
Sun 1 5
Thu 9 3
>>> df["day"] = df["day"].astype('category', categories=["Thu", "Fri", "Sat", "Sun"])
>>> df["smoker"] = df["smoker"].astype('category', categories = ["Yes", "No"])
>>> pt = pd.pivot_table(df, 'tip_pct', index=['sex', 'day'], columns='smoker', aggfunc=pd.np.sum)
smoker Yes No
sex day
Female Thu 3 9
Fri 4 0
Sat 5 0
Sun 5 0
Male Thu 3 9
Fri 4 0
Sat 5 1
Sun 5 1
关于python - 重新排序数据透视表的列/行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18189981/