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

如何基于Pandas DataFrame布尔列生成映射后的分类列

问题描述

现有如下Pandas DataFrame:

import pandas as pd

data = {'book': [True, False, False, False, False],
        'apple': [False, False, True, False, False],
        'cat': [False, False, False, False, True],
        'pigeon': [False, True, False, False, False],
        'shirt': [False, False, False, True, False]}

df = pd.DataFrame(data)

需要创建新列df['category'],将每行中值为True的列名映射为对应的分类,映射规则如下:

book - stationery, apple - fruit, cat - animal, pigeon - bird, shirt - clothes

已知每行仅有一列值为True,预期输出如下:

>>> df
    book  apple    cat  pigeon  shirt    category
0   True  False  False   False  False  stationery
1  False  False  False    True  False        bird
2  False   True  False   False  False        fruit
3  False  False  False   False   True     clothes
4  False  False   True   False  False       animal
解决方案

方法1:idxmax() + map()(推荐,效率最高)

利用idxmax(axis=1)直接获取每行中值为True的列名,再通过预定义的字典完成分类映射:

# 定义分类映射字典
category_map = {
    'book': 'stationery',
    'apple': 'fruit',
    'cat': 'animal',
    'pigeon': 'bird',
    'shirt': 'clothes'
}

# 生成新列
df['category'] = df.idxmax(axis=1).map(category_map)

方法2:melt() + 合并

将宽表转为长表后筛选出值为True的记录,再合并回原DataFrame:

category_map = {
    'book': 'stationery',
    'apple': 'fruit',
    'cat': 'animal',
    'pigeon': 'bird',
    'shirt': 'clothes'
}

# 转换为长表并筛选有效行
melted_df = df.reset_index().melt(id_vars='index', var_name='item', value_name='flag')
valid_rows = melted_df[melted_df['flag']].drop('flag', axis=1)
# 添加分类列
valid_rows['category'] = valid_rows['item'].map(category_map)
# 合并回原表
df = df.merge(valid_rows, left_index=True, right_on='index').drop('index', axis=1)

方法3:apply()逐行处理

逻辑直观但效率较低,适合小数据集:

category_map = {
    'book': 'stationery',
    'apple': 'fruit',
    'cat': 'animal',
    'pigeon': 'bird',
    'shirt': 'clothes'
}

# 逐行找到True对应的列名并映射
df['category'] = df.apply(lambda row: category_map[row[row].index[0]], axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:15:26