如何在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
相关产品推荐
相关产品推荐

