0

我有一个数据集,其中存在一个包含 freezeset 组合的列。

数据

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] I也可以工作。

有人有更优雅的想法吗?

4

1 回答 1

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']) 
于 2019-04-15T13:09:54.307 回答