[英]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.