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

字符串项-生成新列:如何在DataFrame中基于列包含'a'设置新列?

解决方法:基于DataFrame列包含字符的条件赋值

嘿,这个需求用pandas就能轻松实现,我给你分享几种常用且高效的方案,你可以根据自己的场景选择:

首先先还原一下你提到的DataFrame结构,方便演示:

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame([
    ['A', 'cat', '?'],
    ['B', 'dog', '?'],
    ['C', 'rat', '?']
], columns=['col1', 'col2', 'col3'])

方法1:使用np.where()(推荐,性能最优)

这是最简洁高效的方式,适合处理大规模数据集:

# 根据col2是否包含'a',设置col3的值
df['col3'] = np.where(df['col2'].str.contains('a'), '包含a', '不包含a')

原理很简单:df['col2'].str.contains('a')会生成一个布尔值序列,标记每行的col2是否包含字符'a';np.where()会根据这个布尔序列,为col3赋值对应的结果。

方法2:使用df.loc条件赋值(直观易懂)

如果你更喜欢分步操作,这种方式更直观:

# 先给col3设置默认值
df['col3'] = '不包含a'
# 再将col2包含'a'的行的col3更新为目标值
df.loc[df['col2'].str.contains('a'), 'col3'] = '包含a'

方法3:使用apply()(适合复杂自定义逻辑)

如果之后需要扩展更复杂的判断逻辑,apply()可以满足,但注意它的性能不如前两种,适合小数据场景:

def update_col3(row):
    return '包含a' if 'a' in row['col2'] else '不包含a'

df['col3'] = df.apply(update_col3, axis=1)

额外提示

如果需要忽略大小写(比如匹配'A'或'a'),可以给str.contains()加上case=False参数:

df['col3'] = np.where(df['col2'].str.contains('a', case=False), '包含a', '不包含a')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:12:16