为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Pandas 对数据透视表中的列进行排序

使用 Pandas 对数据透视表中的列进行排序

幕布斯7119047 2023-10-18 21:07:35
我已经解决了与使用数据透视表对列进行排序相关的所有问题,但找不到我需要的东西。我有一个这样的数据框:        Date  Moisture     Accum  Year  DayOfYear0 2000-01-01  0.408640  0.408640  2000          11 2000-01-02  0.433425  0.842065  2000          22 2000-01-03  0.429745  1.271810  2000          33 2000-01-04  0.427589  1.699399  2000          44 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      MeanDayOfYear                                ...                              1          0.408640  0.433016  0.420326  ...  0.423164  0.328385  0.4018962          0.433425  0.423607  0.414502  ...  0.419587  0.322804  0.3984343          0.429745  0.418132  0.404171  ...  0.417384  0.318795  0.3969134          0.427589  0.407190  0.394478  ...  0.420361  0.316989  0.3984255          0.428700  0.401072  0.386432  ...  0.417026  0.313664  0.396777我想对每年的值进行排序,但我无法实现。我试过这个:mean1 = mean1.sort_values('2000', ascending = True, axis = 0)但我明白了KeyError: '2000'。我还尝试按我从(“水分”)制作数据透视表的值进行排序,作为对建议的其他问题的回答,但它一直显示类似的错误。如果我尝试对“平均值”列中的值进行排序,我确实会得到排序后的列,但对于年份列(例如“2000”),它(显然)无法完成。我缺少什么?
查看完整描述

2 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

源 DataFrame 中的年份列很可能是int类型,因此数据透视表中的相应列也具有“整数”(而不是“字符串”)名称(运行mean1.info()以检查列类型)。

因此,第一个强制更正是将第一个参数更改为整数 2000

我认为另外两个更正是可取的,但不是必需的:ascendingaxis参数的默认值分别为True0,因此如果您想让代码更短,可以省略它们。

因此,将有问题的行替换为:

mean1 = mean1.sort_values(2000)


查看完整回答
反对 回复 2023-10-18
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

如果你想对每一列进行独立排序,它与以下内容相同:


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

但现在索引根本没有意义,因为所有单元格都已重新排序。所以也许您需要重新索引它。


查看完整回答
反对 回复 2023-10-18
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信