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

Pandas按name_column分组取percentual前5行报KeyError如何解决

错误原因
  • 你的colunas列表存储的是name_column列的取值,而非当前处理的DataFrame的列名。当前DataFrame仅包含Company、name_column、total_parcial、percentual四个列,直接用df[colunas]检索不存在的列自然触发KeyError
  • 原有逻辑混淆了列名和列取值,nlargest的排序依据应该是percentual列而非coluna里的维度名称
修复方案

方案1:更简洁的分组实现(推荐)

直接通过分组取每组Top5,无需手动迭代:

import pandas as pd

# 若仅需要处理colunas列表内指定的name_column取值,先加一步过滤
df_filtered = df_company_top_percent[df_company_top_percent['name_column'].isin(colunas)]

# 按name_column分组,每组取percentual最高的5行,合并为新DataFrame
result = df_filtered.groupby('name_column', group_keys=False)\
            .apply(lambda df_group: df_group.nlargest(5, 'percentual'))\
            .reset_index(drop=True)

方案2:和原有迭代逻辑对齐的实现

如果你需要保留循环写法,修改如下即可:

import pandas as pd

lista4 = []
# 直接迭代colunas列表,不要套df[]
for coluna in colunas:
    # 先筛选当前name_column对应的数据,再取percentual最高的5行
    group_df = df_company_top_percent[df_company_top_percent['name_column'] == coluna]
    top5 = group_df.nlargest(5, 'percentual')
    lista4.append(top5)

# 合并所有分组的Top5结果
result = pd.concat(lista4, ignore_index=True)

两种方案输出的result就是符合要求的目标DataFrame。

内容的提问来源于stack exchange,提问作者Tom AL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:06:05