Regex 基于现有列的值向新列添加值

Regex 基于现有列的值向新列添加值,regex,python-3.x,pandas,Regex,Python 3.x,Pandas,我使用下面的脚本创建一个新的Dataframe列,该列的值取决于正则表达式与现有列中的值的匹配: import pandas as pd #Creation of the dataframe data = [['Value One', 10], ['Value Six', 15],['Value Six', 25], ['Value * Three', 14],['Other', 14]] df = pd.DataFrame(data, columns = ['ColumnA', 'co

我使用下面的脚本创建一个新的Dataframe列,该列的值取决于正则表达式与现有列中的值的匹配:

import pandas as pd 

#Creation of the dataframe
data = [['Value One', 10], ['Value Six', 15],['Value Six', 25], ['Value * Three', 14],['Other', 14]] 

df = pd.DataFrame(data, columns = ['ColumnA', 'columnB'])

#Create new column with the values depending on the values of an existing column 
df.loc[df['ColumnA'].str.match("Value One|Value Two|Value \* Three"),'Category'] = 'One'
df.loc[df['ColumnA'].str.match("Value Four|Value Six|Value \* Five"),'Category'] = 'Two'

#Replace the nulls - the ones that didn't have a match above - with a value
df.Category.fillna('Not Specified', inplace=True)
代码运行良好,但我的目标是对其进行优化,使其适用于更复杂的场景。我想避免有很多行的
df.loc
s,我想知道是否有一种方法可以使用例如字典来自动执行

  • 首先,对于需要匹配的值有不同的列表(
    str.match
    可以替换为
    str.contains
    ,我想在这种情况下,括号内有一个正则表达式)
  • 其次,为将添加到新列中的值提供不同的列表
  • 第三,(这就是我所想的,但请随意提供任何总体解决方案)一个使用df.loc并添加上述列表的循环。这可能需要创建包含两种列表的字典
      我不确定这是否有用,或者您是否已经知道这一点,但您可以使用矢量化

      将numpy导入为np
      def regexr(x):
      如果x.match(“值一|值二|值\*3”):
      返回“一”
      elif x.match(“值四|值六|值\*5”):
      返回“2”
      其他:
      返回“未指定”
      regexr=np.vectorize(regexr)
      df['columnA'].values=regexr(df['columnA'].values)