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

使用Pandas筛选透视表报错:获取指定国家TB最高发病年份及病例数

问题分析与解决方案

错误原因

你的代码报错源于两个核心问题:

  1. idxmax()参数方向错误:默认axis=0是按列找最大值对应的国家,但你需要按行(国家)找最大值对应的年份,必须指定axis=1。
  2. mask逻辑不匹配:highest_cases_year是每个国家对应一个年份(长度3),而total_cases_pivot.columns是14个年份,直接用==比较会触发形状不匹配的广播错误。

修正后的代码

import pandas as pd

# 假设total_cases_pivot是已创建的透视表
countries = ['United States of America', 'China', 'India']

# 1. 获取每个国家病例数最高的年份(按行计算最大值对应的列)
highest_year = total_cases_pivot.loc[countries].idxmax(axis=1)
# 2. 提取对应年份的病例数
highest_count = total_cases_pivot.loc[countries].lookup(highest_year.index, highest_year.values)

# 3. 合并为结构化DataFrame
result = pd.DataFrame({
    '最高病例年份': highest_year.values,
    '对应病例数': highest_count
}, index=countries)

print(result)

代码说明

  • idxmax(axis=1):针对每个国家(行),定位病例数最高的年份(列名)。
  • lookup():通过国家索引和对应年份精准提取数值,彻底避免广播不匹配问题。
  • 最终生成的DataFrame会清晰展示每个国家的最高病例年份及对应数值。

兼容旧版本Pandas的替代方案

如果你的Pandas版本不支持lookup(新版本已标记弃用),可以用apply实现:

def extract_highest(row):
    max_year = row.idxmax()
    return pd.Series([max_year, row[max_year]], index=['最高病例年份', '对应病例数'])

result = total_cases_pivot.loc[countries].apply(extract_highest, axis=1)
print(result)

内容的提问来源于stack exchange,提问作者Tinotenda Mhlanga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:48:22