Python和Pandas的新手。
我想测试字符串是否在列中,如果条件满足字符串值,则创建一个新列。
例如
我有一个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)
但在这种情况下,“标签”列将使用整个字符串值:apple|mango|banana|peach
。我只需要匹配的部分。
我认为您需要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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句