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

如何在Pandas中无需复制列替换值,基于字符串匹配创建新列?

无需复制列直接基于字符串匹配创建新列的方法

针对你的需求,有几种更简洁的方式可以直接生成目标列,无需先复制原列再替换:

方法一:用str.contains结合np.where

利用字符串包含判断直接生成0/1值,逻辑清晰且一步到位:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    "Task": ["T1", "T1", "T2", "T3","T3"],
    "Complexity": [1, 2, 3, 2, 1],
    "Status": ["OpenA", "ClosedB", "ClosedC", "OpenC", "OpenA"]
})

# 不区分大小写匹配Open/Close,直接生成Statno列
df['Statno'] = np.where(df['Status'].str.contains('Open', case=False), '1', 
                       np.where(df['Status'].str.contains('Close', case=False), '0', ''))

方法二:直接在赋值时使用replace

简化你原来的逻辑,不用先复制列,直接对Status列做替换后赋值给新列:

df['Statno'] = df['Status'].replace({'(?i).*Open.*': '1', '(?i).*Close.*': '0'}, regex=True)

这种方式和你原来的效果一致,但省去了先复制列的步骤,代码更简洁。

方法三:用str.replace做批量替换

同样可以直接生成新列:

df['Statno'] = df['Status'].str.replace('(?i).*Open.*', '1', regex=True)
df['Statno'] = df['Statno'].str.replace('(?i).*Close.*', '0', regex=True)

不过这种方式需要两次替换,适合逻辑拆分的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:00:24