python - 按行和列的总和对 Pandas 数据透视表进行排序

标签 python pandas pivot-table

我有(例如)这个 DataFrame:

 COLUMN1 COLUMN2  VALUE
0    0102    1020      1
1    0102    1220      8
2    0102    1210      2
3    0103    1020      1
4    0103    1210      3
5    0103    1222      8
6    0104    1020      3
7    0104    1120      2

(实际上,它大约有 9000 行长。)

由此,我创建了数据透视表,其中索引为 COLUMN1,列为 COLUMN2,值来自 VALUES,由 0 填充,其中 NaN。
COLUMN2  1020  1120  1210  1220  1222
COLUMN1                              
0102        1     0     2     8     0
0103        1     0     3     0     8
0104        3     2     0     0     0

我必须先按总行数对这个枢轴进行排序,然后再按总列数排序。
看起来像这样:
COLUMN2  1220  1222  1020  1210  1120| (GT)
COLUMN1                              |     HIGHEST
0103        0     8     1     3     0| (12) |
0102        8     0     1     2     0| (11) |
0104        0     0     3     0     2| (5)  V
--------------------------------------
(GT:        8     8     5     5     2)
 HIGHTEST---------------------------->  LOWEST

有没有办法做到这一点?
我尝试通过将索引和列作为列表导入来创建数据透视表,按照我希望它们出现的顺序进行排序,但是 Pandas 在创建表时似乎会自动对它们进行 A-Z 排序。

示例代码:
import pandas as pd

exampledata=[['0102','1020',1],['0102','1220',8],['0102','1210',2],
             ['0103','1020',1],['0103','1210',3], ['0103','1222',8],
             ['0104','1020',3],['0104','1120',2]]

df = pd.DataFrame(exampledata,columns=['COLUMN1','COLUMN2','VALUE'])
print(df)
pivot = pd.pivot_table(df,
                       index='COLUMN1',
                       columns='COLUMN2',
                       values='VALUE',
                       aggfunc='sum',
                       fill_value=0)
print(pivot)

最佳答案

pivot_table有一个选项 margin这对于这种情况很方便:

(df.pivot_table(index='COLUMN1', columns='COLUMN2', values='VALUE',
               aggfunc='sum', fill_value=0, margins=True)   # pivot with margins 
   .sort_values('All', ascending=False)  # sort by row sum
   .drop('All', axis=1)                  # drop column `All`
   .sort_values('All', ascending=False, axis=1) # sort by column sum
   .drop('All')    # drop row `All`
)

输出:
COLUMN2  1220  1222  1020  1210  1120
COLUMN1                              
103         0     8     1     3     0
102         8     0     1     2     0
104         0     0     3     0     2

关于python - 按行和列的总和对 Pandas 数据透视表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60778854/

相关文章:

python - Bigcommerce Api Python 基本认证

python - PyMongo 查询不返回结果,尽管相同的查询在 mongoDB shell 中返回结果

python - 根据另一个数据集中的元素位置过滤 pandas 数据帧的快速方法

excel - VBA 连接切片器(寻找代码改进)

python - 从 ElementTree findall 返回的空列表

Python 登录脚本

python - 如何对聚合数据进行分组和绘制?

python - 将 Numpy 存储为 pickled Pandas、Pickled Numpy 或 HDF5

sql - 动态枢轴 null 为 0

excel - 如何访问 PivotCell.RowItem(n) 的字段名称?