使用 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'。我还尝试按我从(“水分”)制作数据透视表的值进行排序,作为对建议的其他问题的回答,但它一直显示类似的错误。如果我尝试对“平均值”列中的值进行排序,我确实会得到排序后的列,但对于年份列(例如“2000”),它(显然)无法完成。我缺少什么?


幕布斯7119047
浏览 137回答 2
2回答

ibeautiful

源 DataFrame 中的年份列很可能是int类型,因此数据透视表中的相应列也具有“整数”(而不是“字符串”)名称(运行mean1.info()以检查列类型)。因此,第一个强制更正是将第一个参数更改为整数 2000。我认为另外两个更正是可取的,但不是必需的:ascending和axis参数的默认值分别为True和0,因此如果您想让代码更短,可以省略它们。因此,将有问题的行替换为:mean1 = mean1.sort_values(2000)

拉莫斯之舞

如果你想对每一列进行独立排序,它与以下内容相同:import numpy as npmean2 = pd.DataFrame(np.sort(mean1.values, axis=0), index=mean1.index, columns=mean1.columns)这将为您提供一个 DataFrame,其中每列单独排序。Year           2000      2001      2002      2018      2019      MeanDayOfYear                                                            1          0.408640  0.401072  0.386432  0.417026  0.313664  0.3893792          0.427589  0.407190  0.394478  0.417384  0.316989  0.3933213          0.428700  0.418132  0.404171  0.419587  0.318795  0.3976454          0.429745  0.423607  0.414502  0.420361  0.322804  0.4027065          0.433425  0.433016  0.420326  0.423164  0.328385  0.402785但现在索引根本没有意义,因为所有单元格都已重新排序。所以也许您需要重新索引它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python