select 行基于一列中的多个字符串

select rows based on multiple strings in one column

在 Pandas 我有一个包含时尚商品销售的订单数据库,需要计算某些特定 items.I 的 return 率 select 所有包含的行'christmas'、'xmas' 或 'gift' 项名称,但当我尝试多个关键字时,我收到错误消息。 有没有办法 select 多个字符串名称? 非常感谢! 这是我的(总结的)数据框:

inp = [{'sales':200, 'returns':100, 'item_name':'cool gift red'}, {'sales':150, 'returns':100, 'item_name':'giftset deluxe'},{'sales':1000, 'returns':100, 'item_name':'xmas sweater'}, {'sales':100, 'returns':100, 'item_name':'ugly christmas jumper BILLY'},
       {'sales':100, 'returns':100, 'item_name':'blue sweater'},{'sales':100, 'returns':100, 'item_name':'ugly christmas jumper JOE'},
       {'sales':100, 'returns':100, 'item_name':'orange cardigan'}
    ] 
df = pd.DataFrame(inp) 
gift=df[df.item_name.str.contains('xmas')]
gift```  

DataFrame 中的 [] 运算符是一个“神奇”且非常强大的工具。但有时程序会 运行 使用更冗长的代码更快。

也就是说,[].loc[] 可以接受多个条件:

礼物 = df_q.loc[(条件 1) | (条件 2) | (条件 3)]

您可以对任意条件组合使用 |&~

如果条件是 equality/comparison,请确保将条件括在括号中,如

.loc[(df.A == 1) & (df.B < 100)]

二元运算符 &| 优先于 equalities/inequalities,因此不使用括号等同于

(df.A == (1 & df.B)) < 100