[英]Pandas .isin on column entries containing lists
我正在尝试通过传入列表并与也包含列表的数据帧列进行比较来使用 isin() 函数过滤数据帧。 这是以下问题的扩展:
例如,现在每一行都包含一个国家列表,而不是每行一个国家。
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 和issubset
或isdisjoint
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.