[英]Sort pandas pivot table by sum of rows and columns
我有(例如)這個 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 在創建表時似乎會自動對它們進行 AZ 排序。
示例代碼:
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
我會嘗試這樣的事情
pivot['sum_cols'] = pivot.sum(axis=1)
pivot = pivot.sort_values('sum_cols' , ascending=False)
您的數據透視表的索引(從值COLUMN1
和COLUMN2
)的類型為String
,並且排序String
從A做Z.也許你應該輸入索引Integer
類型,則排序將數字進行。 考慮到pivot_table 文檔, columns
和index
允許使用整數類型。
df = df.astype('int')
現在,您的pivot_table
函數輸出一個DataFrame
,您可以按照與任何DataFrame
相同的方式按索引或按列對其進行DataFrame
。
根據sort_index 文檔:要對索引進行排序,您應該執行以下操作:
pivot = pivot.sort_index(ascending=0)
要對列進行排序,您應該執行以下操作:
pivot = pivot.sort_index(axis=1, ascending=0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.