pandas .series получает логическое значение, если список в ячейке содержит значение - PullRequest
1 голос
/ 27 апреля 2020

У меня есть серия pandas, где каждая ячейка имеет список значений. Я хочу получить логическое значение, содержит ли список в ячейке значение.

pandas series:

0          [1, 2, 2, 2]
1             [1, 2, 2]
2                [1, 2]
3                [1, 2]
4                [1, 2]
             ...       
1697    [1, 1, 1, 2, 2]
1698          [1, 2, 2]
1699             [1, 2]
1700          [1, 2, 2]
1701             [1, 2]

«isin» не работает и не работает «1 в data ['top-level'] "as просто смотрит, есть ли 1 во всей серии, а не в каждой ячейке.

Буду признателен за некоторые советы и помощь.

1 Ответ

1 голос
/ 27 апреля 2020

Используйте in с пониманием списка:

mask = [1 in x for x in data['top-level']]

Или используйте in в Series.apply:

mask = data['top-level'].apply(lambda x: 1 in x)

Или создайте DataFrame сравните по DataFrame.eq и проверьте хотя бы один True в строках по DataFrame.any:

mask = pd.DataFrame(data['top-level'].tolist(), index=data.index).eq(1).any(axis=1)

РЕДАКТИРОВАТЬ:

print (data)
   top-level
0  [1,2,2,2]
1    [1,2,2]
2   [1,2, 3]
3    [4,5,6]

data = data['top-level'].apply(lambda x: any((number >= 1) and (number < 2) for number in x))
print (data)
0     True
1     True
2     True
3    False
Name: top-level, dtype: bool
...