基于pandas中正则表达式的条件测试创建一个新列

时间:2016-12-07 21:37:33

标签: python pandas

Python及其新手大熊猫。

我想测试一个字符串是否在列中,如果条件符合字符串值,则创建一个新列。

例如

我有一个df:

df = pd.DataFrame({'foodstuff':['apple-martini', 'apple-pie', 'lemon-merengue', 'strawberry-tart'], 'type':['cocktail', 'dessert', 'dessert', 'dessert']})

我有两个正则表达式字符串:

fruit = "apple|mango|banana|peach"

recipe = "cocktail|dessert|appetizer"

我想满足以下条件:

df['foodstuff'].str.contains(fruit, case = False) & (df['type'].str.contains(recipe, case = False))

在这种情况下,输出看起来像:

pd.DataFrame({'foodstuff':['apple-martini', 'apple-pie', 'lemon-merengue', 'strawberry-tart'], 'type':['cocktail', 'dessert', 'dessert', 'dessert'], 'tag':['apple', 'apple', np.nan, np.nan ]}) 

我试图这样做:

df['tag'] = np.where(df['foodstuff'].str.contains(fruit), fruit, np.nan)

但在这种情况下,'标记' column获取整个字符串值: apple|mango|banana|peach。我只需要匹配的部分。

1 个答案:

答案 0 :(得分:2)

我认为你需要str.extract

fruit = "apple|mango|banana|peach"
df['tag'] = df.foodstuff.str.extract('('+fruit+')', expand=False)
print (df)
         foodstuff      type    tag
0    apple-martini  cocktail  apple
1        apple-pie   dessert  apple
2   lemon-merengue   dessert    NaN
3  strawberry-tart   dessert    NaN