【发布时间】:2017-04-16 21:58:58
【问题描述】:
假设我有一个这样的 DataFrame:
df = pd.DataFrame({'consumption':['squirrel eats apple', 'monkey eats apple',
'monkey eats banana', 'badger eats banana'],
'food':['apple', 'apple', 'banana', 'banana'],
'creature':['squirrel', 'badger', 'monkey', 'elephant']})
consumption creature food
0 squirrel eats apple squirrel apple
1 monkey eats apple badger apple
2 monkey eats banana monkey banana
3 badger eats banana elephant banana
我想在“消费”列中找到“生物”和“食物”组合出现的行,即如果苹果和松鼠一起出现,则为真,但如果苹果与大象一起出现,则为假。同样,如果 Monkey 和 Banana 同时出现,则为 True,但 Monkey-Apple 为 false。
我尝试的方法是这样的:
creature_list = list(df['creature'])
creature_list = '|'.join(map(str, creature_list))
food_list = list(df['food'])
food_list = '|'.join(map(str, food_list))
np.where((df['consumption'].str.contains('('+creature_list+')', case = False))
& (df['consumption'].str.contains('('+food_list+')', case = False)), 1, 0)
但这不起作用,因为我在所有情况下都得到 True。
如何检查字符串对?
【问题讨论】:
标签: python string pandas boolean-expression