如何在Python3.x的不同列中基于正则表达式匹配更新另一列?

如何在Python3.x的不同列中基于正则表达式匹配更新另一列?,python,python-3.x,Python,Python 3.x,我有一个列,比如a列有字符串,另一个列B列有二进制值1/0。 我正在尝试匹配列a中的正则表达式,并相应地更新列B 如果这是我的正则表达式 pattern_1 = re.compile(r'\bstudent', re.IGNORECASE) 我希望这张桌子看起来像下面 A B I am a teacher 0 I am a student 1 Student group 1 通过检查每行数据,可以使用pandas创建

我有一个列,比如a列有字符串,另一个列B列有二进制值1/0。 我正在尝试匹配列a中的正则表达式,并相应地更新列B

如果这是我的正则表达式

pattern_1 = re.compile(r'\bstudent', re.IGNORECASE)
我希望这张桌子看起来像下面

A                    B
I am a teacher       0
I am a student       1
Student group        1

通过检查每行数据,可以使用pandas创建dataframe并创建新列:

import pandas as pd
import re
pattern_1 = re.compile(r'\bstudent', re.IGNORECASE)
data = [['I am a teacher',0],['I am a student ',0],['Student group', 0]]

df = pd.DataFrame(data, columns =['A','B']) 
print("orginal df:",df)
df['B'] = df.apply(lambda row: 1 if pattern_1.search(row.A) else row.B , axis=1)
print("\n\nmodified df:",df)
输出:

orginal df:                  A  B
0               I am a teacher  0
1              I am a student   0
2                Student group  0

modified df:                  A  B
0                I am a teacher  0
1               I am a student   1
2                 Student group  1

您没有指定列的存储方式,但这听起来像是带有enumerate的基本for循环的作业。 假设A和B是列表:

for i, a_value in enumerate(A):
  B[i] = bool(pattern_1.search(A))

非常感谢。你能告诉我如何更新已经存在的专栏吗?对于存在匹配项的情况,我只想更新“1”,如果它不是匹配项,我不想更新该字段,并希望保持它以前的状态。基本上,我有什么方法可以避免代码中的“else”部分。我编辑了我的答案,假设最初您在B列的所有数据都是0。如果条件匹配,则仅更改为1。Hello,此代码将现有的1替换为0。然而,它成功地识别了模式,更新为1,现有0保持不变。你能告诉我为什么现有的1s会出现问题吗?更新后的代码不会将1替换为0,它将搜索模式如果找到模式,它将写入1,如果没有找到,它将不会更改B列的值