Pandas:将单列字符串拆分为多布尔列的技术方案问询
解决方案
这里有两种实用的方法来实现你需要的效果,直接结合代码和说明来看:
先构造原始DataFrame
首先我们先还原你提供的数据集:
import pandas as pd df = pd.DataFrame({ 'Colors': [ 'red, white, blue', 'white, blue', 'blue, red', 'white', 'blue' ] })
方法1:用pd.get_dummies快速生成(推荐)
这是最简洁的方式,Pandas的get_dummies会自动识别Colors列的所有唯一值,将每个值作为新列,并填充1/0表示该行是否匹配该值:
# 生成独热编码,去掉前缀保证列名就是原始的颜色组合 result = pd.get_dummies(df['Colors'], prefix='', prefix_sep='') # 如果需要和你示例中的列顺序一致(按原始唯一值出现顺序),可以调整列顺序 unique_colors = df['Colors'].unique() result = result[unique_colors]
运行后得到的结果:
red, white, blue white, blue blue, red white blue 0 1 0 0 0 0 1 0 1 0 0 0 2 0 0 1 0 0 3 0 0 0 1 0 4 0 0 0 0 1
如果想要**布尔值(True/False)**而非0/1,只需要添加dtype=bool参数:
result = pd.get_dummies(df['Colors'], prefix='', prefix_sep='', dtype=bool)
方法2:手动构造(适合理解原理)
如果你想更清晰地看到逻辑,可以手动遍历唯一值生成列:
# 获取所有唯一的颜色组合 unique_vals = df['Colors'].unique() # 对每一行生成对应布尔值的Series result = df['Colors'].apply( lambda x: pd.Series( [val == x for val in unique_vals], index=unique_vals ) ).astype(int) # 若要布尔值则去掉.astype(int)
这个方法的逻辑是:对每行的颜色值,逐一和所有唯一值对比,匹配则标记为True/1,否则为False/0,最后组合成DataFrame。
内容的提问来源于stack exchange,提问作者FaCoffee
相关产品推荐
相关产品推荐

