Проверьте, есть ли предмет из списка - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть набор данных, который существует из столбца с комбинациями 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, однако набор данных существует более 27 миллионов, поэтому я уверен, что это сэкономит мне время на решение этой проблемы..

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 голос
/ 15 апреля 2019

Полагаю, вы имели в виду желаемый результат [1,1,0], но при необходимости вы можете изменить логику

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

, если вам строго нужен список

indexSaver=list(df['indexSaver']) 
...