[英]Sort columns in Pivot table with Pandas
伙計們。 我已經解決了與使用數據透視表對列進行排序相關的所有問題,但找不到我需要的東西。 我有一個這樣的數據框:
Date Moisture Accum Year DayOfYear
0 2000-01-01 0.408640 0.408640 2000 1
1 2000-01-02 0.433425 0.842065 2000 2
2 2000-01-03 0.429745 1.271810 2000 3
3 2000-01-04 0.427589 1.699399 2000 4
4 2000-01-05 0.428700 2.128098 2000 5
我從中創建了一個數據透視表,並根據現有數據計算了另一列:
mean1 = pd.pivot_table(c1, index = 'DayOfYear', columns = 'Year', values = 'Moisture')
mean1['Mean'] = mean1.mean(axis = 1)
我得到了這樣的東西:
Year 2000 2001 2002 ... 2018 2019 Mean
DayOfYear ...
1 0.408640 0.433016 0.420326 ... 0.423164 0.328385 0.401896
2 0.433425 0.423607 0.414502 ... 0.419587 0.322804 0.398434
3 0.429745 0.418132 0.404171 ... 0.417384 0.318795 0.396913
4 0.427589 0.407190 0.394478 ... 0.420361 0.316989 0.398425
5 0.428700 0.401072 0.386432 ... 0.417026 0.313664 0.396777
我想對每年的值進行排序,但我一直無法實現。 我試過這個:
mean1 = mean1.sort_values('2000', ascending = True, axis = 0)
但我得到KeyError: '2000'
。 我還嘗試按我從 ('Moisture') 制作數據透視表的值進行排序,作為對其他問題的建議的回答,但它一直顯示類似的錯誤。 如果我嘗試對“均值”列中的值進行排序,我確實會得到已排序的列,但對於年份列(例如“2000”),它(顯然)無法完成。 我錯過了什么?
源 DataFrame 中的Year列很可能是int類型,因此數據透視表中的相應列也具有“整數”(而不是“字符串”)名稱(運行mean1.info()
以檢查列類型)。
因此,第一個強制更正是將第一個參數更改為整數2000 。
在我看來,另外兩個更正是可取的,但不是必需的:升序和軸參數的默認值分別是True和0 ,所以如果你想保持你的代碼更短,你可以省略它們。
因此,將違規行替換為:
mean1 = mean1.sort_values(2000)
如果你想對每一列獨立排序,你可以試試這個解決方案,它與:
import numpy as np
mean2 = pd.DataFrame(np.sort(mean1.values, axis=0), index=mean1.index, columns=mean1.columns)
這將為您提供一個 DataFrame,其中每一列都單獨排序。
Year 2000 2001 2002 2018 2019 Mean
DayOfYear
1 0.408640 0.401072 0.386432 0.417026 0.313664 0.389379
2 0.427589 0.407190 0.394478 0.417384 0.316989 0.393321
3 0.428700 0.418132 0.404171 0.419587 0.318795 0.397645
4 0.429745 0.423607 0.414502 0.420361 0.322804 0.402706
5 0.433425 0.433016 0.420326 0.423164 0.328385 0.402785
但是現在索引根本沒有意義,因為所有單元格都被重新排序。 所以也許你想重新索引它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.