熊猫-检查列表列中的所有元素是否在另一个列表中

时间:2020-01-14 12:44:29

标签: python python-3.x pandas dataframe

我有一个看起来像这样的数据框:

   Name  Fruits                                                                                                                      
1  Bob  Apple,Banana
2  Sam  Apple,Orange
3  George Banana,Kiwi,Cherry

和另一个看起来像这样的列表:

Allowed_fruits = [Apple,Banana]

我正试图编写一个测试来检查Fruits列中所有元素是否在allowed_fruits列表中。

否则-应该将它们插入另一个数据框。

输出应为:

Found Not allowed Fruits !
  Name  Fruits                                                                                                                      
2  Sam  Orange
3  George Kiwi,Cherry

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

DataFrame.assign用于新的DataFrame,并在生成器理解中使用带分隔值的测试:

Allowed_fruits = ['Apple','Banana']

f = lambda x: ','.join(y for y in x.split(',') if y not in Allowed_fruits)
df1 = df.assign(Fruits = df['Fruits'].apply(f))

或者:

L = [','.join(y for y in x.split(',') if y not in Allowed_fruits) for x in df['Fruits']]
df1 = df.assign(Fruits = L)

最后删除没有值的行,与空字符串进行比较

df1 = df1[df1['Fruits'].ne('')]
print (df1)
     Name       Fruits
2     Sam       Orange
3  George  Kiwi,Cherry