创建Or的列表,然后使用该列表/Python筛选数据帧

2024-09-30 22:13:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,如下所示:

 Supplier  ProductDescription   Manufacturer
   Dell        computer              Dell
    N/A        Dell computer         N/A
   Apple       imac                 Apple
   OfficeMax   lenovo               lenovo ...etc

我想通过包含特定单词但不重复计算的行过滤掉这个数据帧。所以本质上,我想保留这些包含“Dell”、“computer”或“lenovo”的行

要获得:

   Supplier  ProductDescription   Manufacturer
   Dell        computer              Dell
    N/A        Dell computer         N/A
   OfficeMax   lenovo               lenovo 

我所做的是创建一个组合列:

  df['combine']=df.apply(lambda x:'%s,%s,%s' % (x['Supplier'],x['Product Description'],x['Manufacturer']),axis=1) 

然后我试图创建一个列表来搜索和筛选

List=('Dell' or 'computer' or 'lenovo')
df=df[df['combine'].str.contains(List)]

但是,当我运行此代码时,我只得到与第一个值对应的行,因此代码不会搜索列表中的每个单词

还有别的办法吗

谢谢


Tags: or数据appledf列表单词computerlist
1条回答
网友
1楼 · 发布于 2024-09-30 22:13:50

您可以使用isin

In [14]: df[df.isin(['Dell computer', 'Dell', 'computer', 'lenovo']).any(axis=1)]
Out[14]: 
    Supplier ProductDescription Manufacturer
0       Dell           computer         Dell
1        NaN      Dell computer          NaN
3  OfficeMax             lenovo       lenovo

我添加了一个“戴尔电脑”选项。如果您希望以不同的方式输入姓名,那么您可能需要在执行此操作之前将姓名正规化。这只完全吻合

相关问题 更多 >