繁体   English   中英

包含列表的列条目上的 Pandas .isin

[英]Pandas .isin on column entries containing lists

我正在尝试通过传入列表并与也包含列表的数据帧列进行比较来使用 isin() 函数过滤数据帧。 这是以下问题的扩展:

如何为 Pandas 数据框实现“in”和“not in”

例如,现在每一行都包含一个国家列表,而不是每行一个国家。

df = pd.DataFrame({'countries':[['US', 'UK'], ['UK'], ['Germany', 'France'], ['China']]})

为了过滤,我设置了两个单独的列表:

countries = ['UK','US']
countries_2 = ['UK']

预期结果应该相同,因为第 0 行和第 1 行都包含英国和/或美国

>>> df[df.countries.isin(countries)]
  countries
0     US, UK
1         UK
>>> df[~df.countries.isin(countries_2)]
  countries
0     US, UK
1         UK

但是Python抛出了以下错误

TypeError: unhashable type: 'list'

使用 set 和issubsetisdisjoint with map一种可能解决方案:

print (df[df.countries.map(set(countries).issubset)])
  countries
0  [US, UK]

print (df[~df.countries.map(set(countries).isdisjoint)])
  countries
0  [US, UK]
1      [UK]

print (df[df.countries.map(set(countries_2).issubset)])
  countries
0  [US, UK]
1      [UK]

print (df[~df.countries.map(set(countries_2).isdisjoint)])
  countries
0  [US, UK]
1      [UK]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM