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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:27:21