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

如何使用Python Pandas获取各地区死亡率最高的对应年份

解决Pandas DataFrame中获取每行最大值对应列名(年份)的问题

嘿,我完全懂你的困扰!你用df.max(axis=1)只能拿到每个地区的最高死亡率数值,却没法对应到具体的年份——这确实是因为max()方法只返回值,不返回其所在的列索引。不过Pandas有专门的工具能帮你搞定这个需求,下面给你两种简单实用的方案:

方案一:用idxmax()直接获取对应年份,再合并数值

idxmax(axis=1)是Pandas里专门用来找每行最大值所在列名的方法(你的列正好是年份,完美匹配)。结合max()就能同时得到年份和对应的死亡率:

import pandas as pd

# 假设你的数据集是这样的结构(示例)
data = {
    '地区': ['北京', '上海', '广州'],
    '2018': [7.2, 6.8, 7.0],
    '2019': [7.5, 7.1, 7.3],
    '2020': [7.3, 7.5, 7.2]
}
df = pd.DataFrame(data).set_index('地区')

# 获取每个地区死亡率最高的年份
max_year = df.idxmax(axis=1)
# 获取对应的最高死亡率数值
max_mortality = df.max(axis=1)

# 合并成一个清晰的结果DataFrame
result = pd.DataFrame({
    '最高死亡率年份': max_year,
    '最高死亡率': max_mortality
})

print(result)

运行后你会得到这样的结果:

最高死亡率年份  最高死亡率
地区              
北京     2019    7.5
上海     2020    7.5
广州     2019    7.3

方案二:用apply()自定义函数返回完整信息

如果你想更灵活地处理(比如后续要加更多逻辑),可以用apply()对每行自定义处理:

def get_max_mortality_info(row):
    # 拿到当前行的最高死亡率
    max_val = row.max()
    # 拿到对应的年份(列名)
    max_year = row.idxmax()
    # 返回Series方便合并成DataFrame
    return pd.Series([max_year, max_val], index=['最高死亡率年份', '最高死亡率'])

# 对每行应用函数
result = df.apply(get_max_mortality_info, axis=1)
print(result)

特殊情况处理:多个年份死亡率相同

如果某个地区有多个年份死亡率一样高,idxmax()只会返回第一个出现的年份。如果你需要所有对应的年份,可以把函数改成这样:

def get_all_max_years(row):
    max_val = row.max()
    # 筛选出所有等于最大值的列名(年份),转成列表
    max_years = row[row == max_val].index.tolist()
    return pd.Series([max_years, max_val], index=['所有最高死亡率年份', '最高死亡率'])

result = df.apply(get_all_max_years, axis=1)

这样就能拿到所有对应年份的列表啦!

内容的提问来源于stack exchange,提问作者I AM A Hacker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:17:34