Python 基于列表值筛选列结果

Python 基于列表值筛选列结果,python,pandas,Python,Pandas,我想过滤掉数据框中的一些行,其中类别行包括我列表中的一个项目 它适用于精确匹配,但如果有多个类别与记录关联,则不适用 例如: 身份证件 类别 日期 使用者 1. A. 01.01.2020 阿尔法 2. B 01.01.2020 贝塔 3. C 01.01.2020 刻痕 4. A、 C 01.01.2020 射线 5. A、 B 01.01.2020 厕所 6. B、 C 01.01.2020 史密斯 如果可能,使用子字符串进行测试: exclude_list = ['A', 'C'] df1

我想过滤掉数据框中的一些行,其中类别行包括我列表中的一个项目

它适用于精确匹配,但如果有多个类别与记录关联,则不适用

例如:

身份证件 类别 日期 使用者 1. A. 01.01.2020 阿尔法 2. B 01.01.2020 贝塔 3. C 01.01.2020 刻痕 4. A、 C 01.01.2020 射线 5. A、 B 01.01.2020 厕所 6. B、 C 01.01.2020 史密斯 如果可能,使用子字符串进行测试:

exclude_list = ['A', 'C']
df1 = df[~df['Categories'].str.contains('|'.join(exclude_list))]
另一个想法是分解由
分割的值,并使用
isin
any
进行测试,以便每个索引至少匹配一个值:

exclude_list = ['A', 'C']
df1 = df[~df['Categories'].str.split(', ').explode().isin(exclude_list).any(level=0)]
最后一种可能的解决方案,使用apply,因此在实际数据中可能更慢:

df1 = df[~df['Categories'].apply(lambda x: any([y in exclude_list for y in x.split(', ')]))]


太棒了,谢谢!我花了多少时间在谷歌上搜索并试图弄明白这一点!你是救命恩人
print (df1)
   ID Categories        Date Users
1   2          B  01.01.2020  beta