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

如何在Pandas中将含特定子串的列值替换为1,其余为0?

实现方法

这里有几种简洁高效的方式可以实现你的需求:

方法1:使用str.contains() + 类型转换

str.contains()会检查每个字符串是否包含指定子串,返回布尔值(True/False),直接转成整数就能得到1/0:

import pandas as pd

sample_df = pd.DataFrame({
    'cars': ['BMW', 'Honda', 'Porshe', 'BMWLuxury', 'TeslaLuxury', 'Ford', 'Ferrari', 'PorsheLuxury']
})

# 生成新列或者替换原列都可以
sample_df['luxury_flag'] = sample_df['cars'].str.contains('Luxury').astype(int)
# 如果要替换原列:sample_df['cars'] = sample_df['cars'].str.contains('Luxury').astype(int)

运行后结果:

cars  luxury_flag
0         BMW            0
1       Honda            0
2      Porshe            0
3    BMWLuxury            1
4  TeslaLuxury            1
5        Ford            0
6      Ferrari            0
7  PorsheLuxury            1

方法2:使用numpy.where()

如果需要更灵活的条件分支,numpy.where()是不错的选择:

import pandas as pd
import numpy as np

sample_df = pd.DataFrame({
    'cars': ['BMW', 'Honda', 'Porshe', 'BMWLuxury', 'TeslaLuxury', 'Ford', 'Ferrari', 'PorsheLuxury']
})

sample_df['luxury_flag'] = np.where(sample_df['cars'].str.contains('Luxury'), 1, 0)

方法3:使用apply()自定义函数

适合逻辑更复杂的场景,小数据量下也能轻松使用:

import pandas as pd

sample_df = pd.DataFrame({
    'cars': ['BMW', 'Honda', 'Porshe', 'BMWLuxury', 'TeslaLuxury', 'Ford', 'Ferrari', 'PorsheLuxury']
})

def check_luxury(car):
    return 1 if 'Luxury' in car else 0

sample_df['luxury_flag'] = sample_df['cars'].apply(check_luxury)

注意事项

如果你的数据里存在缺失值(NaN),可以在str.contains()中添加na=False参数,避免生成NaN结果:

sample_df['luxury_flag'] = sample_df['cars'].str.contains('Luxury', na=False).astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:05:22