检查列表中是否有 frozenset 项
Check if item of frozenset in 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,1,0],但如果需要你可以反转逻辑
df['indexSaver']=df['ID1'].apply(lambda f: 1 if len(f.intersection(['a','b']))>0 else 0)
如果您确实需要它作为列表
indexSaver=list(df['indexSaver'])
我有一个数据集,其中包含一个包含 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,1,0],但如果需要你可以反转逻辑
df['indexSaver']=df['ID1'].apply(lambda f: 1 if len(f.intersection(['a','b']))>0 else 0)
如果您确实需要它作为列表
indexSaver=list(df['indexSaver'])