【问题标题】:Pandas pivot table Nested Sorting Part 3Pandas 数据透视表嵌套排序第 3 部分
【发布时间】:2016-09-07 05:17:16
【问题描述】:

第 3 集:

part 2 中,我们保留了索引的分层特性,同时在最右边的级别内进行排序。在part 1 中,我们将自定义排序应用于最左侧的索引级别,同时对最右侧索引中的值进行排序。

现在,我想结合这两种方法。

给定以下数据框和生成的数据透视表:

import pandas as pd
df=pd.DataFrame({'A':['a','a','a','a','a','b','b','b','b'],
                 'B':['x','y','z','x','y','z','x','y','z'],
                 'C':['a','b','a','b','a','b','a','b','a'],
                 'D':[7,5,3,4,1,6,5,3,1]})
df

    A   B   C   D
0   a   x   a   7
1   a   y   b   5
2   a   z   a   3
3   a   x   b   4
4   a   y   a   1
5   b   z   b   6
6   b   x   a   5
7   b   y   b   3
8   b   z   a   1

table = pd.pivot_table(df, index=['A', 'B','C'],aggfunc='sum')
table
            D
A   B   C   
a   x   a   7
        b   4
    y   a   1
        b   5
    z   a   3
b   x   a   5
    y   b   3
    z   a   1
        b   6

我想指定“B”的自定义顺序。 这似乎有效:

df['B']=df['B'].astype('category')
df['B'].cat.set_categories(['z','x','y'],inplace=True)

接下来,我希望数据透视表保持上面指定的“B”顺序,同时在“B”的每个类别中对值“D”进行降序排序。

像这样:

            D
A   B   C   
    z   a   3
    x   a   7
a       b   4
    y   b   5
        a   1
    z   b   6
b       a   1
    x   a   5
    y   b   3

提前致谢!

【问题讨论】:

    标签: sorting python-3.x pandas pivot-table


    【解决方案1】:

    更新:使用pivot_table()

    In [79]: df.pivot_table(index=['A','B','C'], aggfunc='sum').reset_index().sort_values(['A','B','D'], ascending=[1,1,0]).set_index(['A','B','C'])
    Out[79]:
           D
    A B C
    a x a  7
        b  4
      y b  5
        a  1
      z a  3
    b x a  5
      y b  3
      z b  6
        a  1
    

    这就是你想要的吗?

    In [64]: df.sort_values(['A','B','D'], ascending=[1,1,0]).set_index(['A','B','C'])
    Out[64]:
           D
    A B C
    a z a  3
      x a  7
        b  4
      y b  5
        a  1
    b z b  6
        a  1
      x a  5
      y b  3
    

    【讨论】:

    • 这适用于我的示例数据,但对于我的真实数据,它似乎并没有总结所有的 'C' 实例(即,当'B' 时,我得到 2 行 'C' 的 'a' '是'z','A'是'a')。有没有办法用 pivot_table 函数做到这一点?我试过了,但它在“A”上抛出了一个关键错误。
    • @DanceParty2,当然,请参阅“更新”
    猜你喜欢
    • 2016-09-07
    • 2016-09-05
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 2016-09-15
    • 2016-06-10
    相关资源
    最近更新 更多