【问题标题】:I want to sort pivot table multilevel我想对数据透视表进行多级排序
【发布时间】:2021-08-27 09:55:32
【问题描述】:

创建的df:

import pandas as pd

data = {'Type': ['A', 'B', 'C', 'C', 'A', 'B'],
        'Name': ['ab', 'bc', 'Cd', 'ef', 'gh', 'ij'],
        'Ratings': [20, 21, 19, 18, 10, 5]}

# Create DataFrame
df = pd.DataFrame(data)

pivot = df.pivot_table(index=['Type', 'Name', 'Ratings'], aggfunc='sum')
pivot.sort_values(['Type', 'Ratings'], ascending=False)

df3 = pivot.reset_index().sort_values(['Type', 'Ratings'], ascending=[True, False]).set_index(['Type', 'Name'])

print(df3)

输出:

Type Name       Ratings 
A    ab         20
     gh         10
B    bc         21
     ij          5
C    Cd         19
     ef         18

需要的输出:

Type Name       Ratings  
C    Cd         19
     ef         18
A    ab         20
     gh         10
B    bc         21
     ij          5

输出:

Ratings
Type Name       Ratings 
 A    ab         20
      gh         10
 B    bc         21
      ij          5
 C    Cd         19
      ef         18

需要的输出:

Type Name       Ratings  
C    Cd         19
     ef         18
A    ab         20
     gh         10
B    bc         21
     ij          5 

预期:由于 c 的总评分为 37,a:30,B:26`

【问题讨论】:

    标签: pandas sorting pivot-table


    【解决方案1】:

    尝试使用reindex 将自定义订单应用于0 级。使用groupby sum 按降序创建自定义订单,将最高和Type 放在第一位,将最低和Type 最后放在最后:

    pivot = (
        df.pivot_table(index=['Type', 'Name'], aggfunc='sum')
            .sort_values('Ratings', ascending=False)
            .reindex(df.groupby('Type')['Ratings'].sum()
                     .sort_values(ascending=False).index,
                     axis=0, level=0)
    )
    

    pivot:

               Ratings
    Type Name         
    C    Cd         19
         ef         18
    A    gh         20
         ab         10
    B    bc         21
         ij          5
    

    使用的数据框:

    df = pd.DataFrame({
        'Type': ['A', 'B', 'C', 'C', 'A', 'B'],
        'Name': ['ab', 'bc', 'Cd', 'ef', 'gh', 'ij'],
        'Ratings': [10, 21, 19, 18, 20, 5]
    })
    
      Type Name  Ratings
    0    A   ab       10
    1    B   bc       21
    2    C   Cd       19
    3    C   ef       18
    4    A   gh       20
    5    B   ij        5
    

    【讨论】:

    • 我想按升序/降序对 df 进行排序。我想根据度量'Ratings'对类型和名称进行排序。这只是短 df。我有 30 行。
    • 好的。我第一次理解错了。立即尝试。
    • 谢谢。这解决了我的一半问题。我想对类型和名称列进行排序。例如。 a ab 10 gh 20 这里 gh 应该高于 ab
    • 好的。现在按组总数和评分排序。查看编辑。
    • 谢谢。它有效。我想如果我再添加一列(城市)会怎样。如何再对一列进行排序。
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多