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

如何在Pandas中将多分类重命名合并为指定三类?

问题

现有分类集合:Bathing、Cooking、Cleaning、Cooking and Drinking、Cooking, cleaning and drinking、Domestic use,需要将这些分类合并重命名为Cooking、Drinking、Cleaning三类。已知可以用 pandas 的Categorical类型,参考示例代码:

df3 = pd.Categorical(['cooking', 'domestic use', 'cleaning', 'drinking'])

想要实现类似df3.rename_categories(...)的重命名合并效果。

解决方法

pandas 的rename_categories方法支持用字典做映射,正好可以实现多旧分类合并到新分类的需求。注意不能用集合(集合无法定义映射关系),必须用键值对明确每个旧分类对应的目标分类。

基础实现(合并分类)

import pandas as pd

# 构造示例分类数据
df3 = pd.Categorical(['Bathing', 'Cooking', 'Cleaning', 'Cooking and Drinking', 
                      'Cooking, cleaning and drinking', 'Domestic use'])

# 定义映射规则:旧分类 → 新分类
category_map = {
    # 归到 Cooking 类的旧分类
    'Cooking': 'Cooking',
    'Cooking and Drinking': 'Cooking',
    'Cooking, cleaning and drinking': 'Cooking',
    # 归到 Cleaning 类的旧分类
    'Cleaning': 'Cleaning',
    'Bathing': 'Cleaning',
    'Domestic use': 'Cleaning'
}

# 执行重命名合并
df3 = df3.rename_categories(category_map)

# 查看结果
print(df3.categories)
# 输出:Index(['Cleaning', 'Cooking'], dtype='object')

确保保留所有目标分类(包括无数据的Drinking)

如果需要强制保留Drinking分类(即使当前没有对应数据),可以先通过set_categories设置完整的目标分类列表,再做映射:

# 先指定所有目标分类
df3 = df3.set_categories(['Cooking', 'Drinking', 'Cleaning'])

# 执行映射(覆盖所有旧分类)
df3 = df3.rename_categories(category_map)

print(df3.categories)
# 输出:Index(['Cooking', 'Drinking', 'Cleaning'], dtype='object')

注意点

  • 映射必须用字典:键是旧分类名,值是新分类名,集合无法完成多对一的合并逻辑
  • 所有旧分类都要在映射字典中定义,否则未被映射的分类会被转为NaN
  • 如果需要保留空分类(比如示例中的Drinking),必须先调用set_categories指定完整分类列表

内容的提问来源于stack exchange,提问作者Caly Saratuki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:55:30