python - 重新排序数据透视表的列/行?

标签 python pandas pivot-table

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/

相关文章:

python - 理解caffe中的net_surgery

python - 制作 Keras 模型时将数据拆分为训练、测试和评估

python - Pandas DataFrame 将字典值分配列应用或映射到 MultiIndex 值的函数

excel - 拖动 GETPIVOTDATA 公式并自动更改日期

python - 将数据框列中的字符串替换为字符串中的数字

python - 如何在没有 Microsoft Visual c++ 14.0 的 Windows 上安装适用于 python 3.6 的 h5py

python - 按两列过滤 pandas 数据框,其中一列是列表

python - 将列表项添加到 DataFrame 列(如果它存在于某个范围内)

excel - 按列标签筛选的 Excel/PowerPivot 数据透视表中的前 X

python - Pandas DataFrame 如何按指定列的值对行进行分组(透视?),但保留原始索引?