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

如何统计Pandas DataFrame中Equipment字段值出现次数并生成对应列

解决方法

你的核心需求是把逗号分隔的Equipment字段拆分为独热编码列(存在为1,不存在为0),原代码的问题在于错误地对index列执行了explode,且未处理字符串中的空格(比如" Android"带空格会生成错误的列名)。以下是两种正确实现方式:

方法一:拆分展开后生成哑变量

import pandas as pd

data = {'Equipment': ['ABS, Android, Zentralverriegelung', 'Xenon, ABS, Apple', 'Android, Hupe, Blinker', 'Radio, CD', '', 'ABS, Android, Zentralverriegelung'],
        'Col1': ['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa'],
        'Col2': ['bbb', 'bbb', 'bbb', 'bbb', 'bbb', 'bbb'],
        'Col3': ['ccc', 'ccc', 'ccc', 'ccc', 'ccc', 'ccc'],
        'Col4': ['ddd', 'ddd', 'ddd', 'ddd', 'ddd', 'ddd'],
        'Col5': ['eee', 'eee', 'eee', 'eee', 'eee', 'eee'],
        }

df = pd.DataFrame(data)

# 拆分Equipment为多列并展开,同时去除每个元素的空格
exploded = df['Equipment'].str.split(',', expand=True).stack().str.strip()
# 过滤空字符串(处理Equipment为空的情况)
exploded = exploded[exploded != '']
# 生成哑变量后按原索引分组求和,同一行的同一Equipment只会出现一次,求和结果为1
dummies = pd.get_dummies(exploded).groupby(level=0).sum()
# 合并原表(去掉Equipment字段)和哑变量列,缺失值填充为0并转为整数
result = pd.concat([df.drop('Equipment', axis=1), dummies], axis=1).fillna(0).astype(int)

print(result)

方法二:简洁的字符串处理+get_dummies

import pandas as pd

data = {'Equipment': ['ABS, Android, Zentralverriegelung', 'Xenon, ABS, Apple', 'Android, Hupe, Blinker', 'Radio, CD', '', 'ABS, Android, Zentralverriegelung'],
        'Col1': ['aaa', 'aaa', 'aaa', 'aaa', 'aaa', 'aaa'],
        'Col2': ['bbb', 'bbb', 'bbb', 'bbb', 'bbb', 'bbb'],
        'Col3': ['ccc', 'ccc', 'ccc', 'ccc', 'ccc', 'ccc'],
        'Col4': ['ddd', 'ddd', 'ddd', 'ddd', 'ddd', 'ddd'],
        'Col5': ['eee', 'eee', 'eee', 'eee', 'eee', 'eee'],
        }

df = pd.DataFrame(data)

# 清理Equipment字段:拆分后去除空格,再重新用逗号拼接
df['Equipment_clean'] = df['Equipment'].apply(lambda x: ','.join([item.strip() for item in x.split(',') if item.strip()]))
# 直接生成独热编码列
dummies = df['Equipment_clean'].str.get_dummies(sep=',')
# 合并原表和哑变量列,清理中间字段
result = pd.concat([df.drop(['Equipment', 'Equipment_clean'], axis=1), dummies], axis=1)

print(result)

两种方法最终都会生成包含Col1-Col5以及所有Equipment值对应列的DataFrame,每个Equipment列的值为1(该行包含该设备)或0(不包含)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:44:53