检查列表中的frozenset项目

时间:2019-04-15 12:58:40

标签: python pandas list frozenset

我有一个数据集,该数据集包含具有冻结集组合的列。

数据

import pandas as pd
import numpy as np
d = {'ID1': [frozenset(['a', 'b']), frozenset(['a','c']), frozenset(['c','d'])]}
df = pd.DataFrame(data=d)

此外,我有一个包含字母的列表,现在我想要一个包含数据集中行索引的列表,该列表中的项出现在该数据集中。因此,假设以下列表:

lst = ['a', 'b']
indexSaver = []

我可以使用for循环解决此问题,但是数据集已经超过2700万,因此我非常确定这将节省我一些时间来解决此问题。

for i in range(len(df)):
    for item in df['ID1'].iloc[i]:
        if item in lst:
            indexSaver.append(i)

所需的输出: 在这种情况下,项目a和项目b出现在第0行(两次)和第1行中。此处的期望输出将是 [0,0,1] ,上面已经说过,输出为 [0,1] 我也可以工作。

有人更优雅的想法吗?

1 个答案:

答案 0 :(得分:1)

我假设您的意思是期望的输出为[1,1,0],但是您可以根据需要反转逻辑

 df['indexSaver']=df['ID1'].apply(lambda f: 1 if  len(f.intersection(['a','b']))>0 else 0)

如果您严格需要它作为列表

indexSaver=list(df['indexSaver'])