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

如何修改Pandas中df.groupby输出的索引名称及优化计数方法

问题描述

我有一个pd.Series类型的df['target'],其中值为0代表malignant(恶性)、1代表benign(良性)。我希望统计两类值的数量,并将索引名改为'malignant'和'benign',得到索引为['malignant', 'benign']、名为target的长度为2的整数型Series,示例如下:

target 
malignant    212 
benign       357 

我尝试了以下代码:

target = df.groupby(['target']).size()
target.rename(index={'0': 'malignant', '1': 'benign'})

但返回结果的索引名仍为0和1,如下所示:

target 
0     212 
1     357 
dtype: int64

请问该如何解决?是否有比.size()更好的计数方法?

解决方案

1. 修复现有代码的问题

你的代码存在两个核心问题:

  • 索引类型不匹配:如果df['target']的取值是整数类型,groupby生成的索引也是整数0、1,你用字符串'0'、'1'去匹配自然不会生效,要改用整数作为映射键。
  • 未接收返回值:rename()默认返回新的Series对象,不会原地修改原变量,需要重新赋值给target,或者添加inplace=True参数实现原地修改。

修复后的代码:

target = df.groupby(['target']).size()
# 方法一:重新赋值接收新对象
target = target.rename(index={0: 'malignant', 1: 'benign'})
# 方法二:原地修改原对象
# target.rename(index={0: 'malignant', 1: 'benign'}, inplace=True)

2. 更简洁的计数方法:value_counts()

pd.Series.value_counts()是专门用于统计值频次的方法,比groupby().size()更简洁直接,搭配rename即可完成需求:

# 基础用法
target = df['target'].value_counts().rename(index={0: 'malignant', 1: 'benign'})
# 若需要固定索引顺序为malignant在前,添加sort=False
target = df['target'].value_counts(sort=False).rename(index={0: 'malignant', 1: 'benign'})

如果要严格保证索引顺序为['malignant', 'benign'],可以再配合reindex:

target = df['target'].value_counts()\
                     .rename(index={0: 'malignant', 1: 'benign'})\
                     .reindex(['malignant', 'benign'])

内容的提问来源于stack exchange,提问作者Jay Ji

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:36:26