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

Python 3中如何将DataFrame列的集合值拆分为二进制指示列?

解决Pandas集合类型列转二进制指示列的问题

我来帮你搞定这个需求!要把DataFrame里的集合类型列拆成二进制指示列,同时保留原列,其实用Pandas的str.get_dummies配合一些小处理就能实现,不过因为你的列是集合类型(不是字符串),得先把集合转成逗号分隔的字符串,这样get_dummies才能识别。

完整代码示例

import pandas as pd

# 原始DataFrame
data = {'Amenities':[{'TV', 'Wifi'}, {'TV',"Cable TV",'Internet','Wifi'}, {'Internet','Wifi'}]}
df2 = pd.DataFrame(data)

# 步骤1:把集合转成逗号分隔的字符串
df2['Amenities_str'] = df2['Amenities'].apply(lambda x: ','.join(x))

# 步骤2:生成二进制指示列
dummies = df2['Amenities_str'].str.get_dummies(sep=',')

# 步骤3:合并原DataFrame和指示列,然后删掉临时的字符串列
result_df = pd.concat([df2, dummies], axis=1).drop('Amenities_str', axis=1)

print(result_df)

输出结果

你会得到和期望完全一致的DataFrame:

Amenities  Cable TV  Internet  TV  Wifi
0              {'TV', 'Wifi'}         0         0   1     1
1  {'TV', 'Wifi', 'Internet', 'Cable TV'}         1         1   1     1
2        {'Internet', 'Wifi'}         0         1   0     1

代码细节解释

  • 集合转字符串:str.get_dummies是针对字符串列设计的,所以用apply(lambda x: ','.join(x))把每个集合转成逗号分隔的字符串,比如{'TV','Wifi'}会变成'TV,Wifi'。
  • 生成指示列:str.get_dummies(sep=',')会自动提取所有唯一的设施作为列名,每行如果包含对应设施就标记为1,否则为0。
  • 合并与清理:用pd.concat把原DataFrame和生成的指示列横向合并,最后删掉临时创建的字符串列,保留原始的Amenities列。

这样既保留了原始的集合列,又得到了需要的二进制指示列,完美匹配你的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:39:25