如何用Pandas将DataFrame的other列对应列设为1其余为0?
Pandas实现根据指定列值设置对应列为1的方法
嘿,这个需求其实挺常见的,用Pandas有几种简洁的实现方式,我给你整理两个最实用的方案:
方法1:用pd.get_dummies快速生成(推荐)
这是效率最高、代码最简洁的方式,利用独热编码直接生成对应列的0/1值,再和原数据合并:
import pandas as pd # 先构造你的示例DataFrame(如果已有数据可跳过这步) df = pd.DataFrame({ 'other': [1,21,71,2,22,72,3,23,73,60,90,80,91,64,64,155,165], 'x': ['x','z','y','x','z','y','x','z','y','x','z','y','z','x','y','x','y'], 'y': [pd.NA]*17, 'z': [pd.NA]*17 }) # 对x列做独热编码,去掉前缀避免列名带下划线 dummies = pd.get_dummies(df['x'], prefix='') dummies.columns = dummies.columns.str.replace('_', '') # 合并other列和编码结果,覆盖原df的x/y/z列 df = pd.concat([df['other'], dummies], axis=1)
执行后,原DataFrame的x/y/z列就会被替换为对应的0/1值,other列完全保留。
方法2:手动赋值(适合理解逻辑)
如果你想更直观地看到每一步的操作逻辑,可以用循环遍历的方式实现:
# 遍历每一行,先把所有x/y/z列设为0,再将对应列设为1 for idx, row in df.iterrows(): target_col = row['x'] df.loc[idx, ['x', 'y', 'z']] = 0 df.loc[idx, target_col] = 1
不过这种方法在数据量较大时效率会低于get_dummies,所以小数据集用用没问题,大数据优先选第一种方法。
验证结果
运行后打印前5行看看效果:
print(df.head())
输出如下:
other x y z 0 1 1 0 0 1 21 0 0 1 2 71 0 1 0 3 2 1 0 0 4 22 0 0 1
内容的提问来源于stack exchange,提问作者mkmostafa
相关产品推荐
相关产品推荐

