You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对从Pandas多列数据框提取的最大值序列进行降序排序

如何对从Pandas多列数据框提取的最大值序列进行降序排序

我明白你的问题啦——你从多列的累计降雨量数据框里提取了每列的最大值(也就是每年的累计降雨峰值),但尝试排序时没得到预期结果。这是因为你用错了排序方法,我来一步步帮你解决:

先分析你当前的问题

  • 你用df.max()得到的是一个Series(不是DataFrame):它的索引是年份/平均列名,值是对应列的最大值。
  • 你之前用sort_index(axis=0)是对**索引(年份)**排序,而非对最大值排序,所以结果还是按年份顺序输出;而axis=1报错是因为Series只有一个轴(轴0),不存在轴1,自然会抛出错误。

正确的解决步骤

1. 按最大值降序排序(保留索引)

如果你只是想对最大值序列按值降序排列,直接用sort_values()方法,指定ascending=False(降序)即可:

import pandas as pd

# 假设你的原始数据框已读取为df
max_series = df.max()
# 按最大值降序排序
sorted_series = max_series.sort_values(ascending=False)
print(sorted_series)

针对你的示例数据,输出会是这样(按降雨量从高到低排列):

1951    837.6
1954    786.0
1949    713.6
1953    654.9
1946    647.0
...
Avge    542.7
1950    387.4
1948    379.5
...

2. 转成你需要的两列DataFrame(年份 + 最大值)

如果你要生成包含「年份」和「最大值」的两列DataFrame,可以在排序后用reset_index()把索引转成普通列,再重命名列名让结果更清晰:

# 排序后转成DataFrame
sorted_df = max_series.sort_values(ascending=False).reset_index()
# 重命名列名
sorted_df.columns = ['Year', 'Max_Cumulative_Rainfall']
print(sorted_df)

输出的结构会是这样:

YearMax_Cumulative_Rainfall
01951837.6
11954786.0
21949713.6
31953654.9
.........

3. 可选:排除"Avge"列,只排序年份数据

如果你不想包含平均(Avge)行,可以先从原始数据框中删除该列,再计算最大值和排序:

# 排除Avge列,仅计算年份对应的最大值
yearly_max_series = df.drop('Avge', axis=1).max()
# 排序并转成DataFrame
sorted_yearly_df = yearly_max_series.sort_values(ascending=False).reset_index()
sorted_yearly_df.columns = ['Year', 'Max_Cumulative_Rainfall']

关键知识点总结

  • df.max():计算每列的最大值,返回Series,索引为原DataFrame的列名,值为对应列的最大值。
  • sort_values(ascending=False):对Series的值进行降序排序,这是实现你需求的核心方法。
  • sort_index():仅对Series/DataFrame的索引排序,不是对值排序,所以之前用它得不到你想要的结果。
  • reset_index():把Series的索引转成普通列,方便生成你需要的两列DataFrame结构。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 08:23:01