Панды, Исин, ​​столбец списков - PullRequest
0 голосов
/ 13 ноября 2018

Попытка создать логический флаг, который читает ИСТИНА, если одно или другое значение находится в списке.Приведенный ниже код возвращает FALSE для строки 1, и я не уверен, почему, может кто-нибудь помочь мне понять, почему FALSE возвращается для первой строки?

lists={'someList!':[[1,2,12,6,'ABC'],[1000,4,'z','a','bob']]}
dfLists = pd.DataFrame(lists)
dfLists['contains?']=dfLists['someList!'].isin([0,1])

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Используя конструктор Dataframe, вы выравниваете столбец list, затем используете isin

pd.DataFrame(dfLists['someList!'].tolist()).isin([1,2]).any(1)
Out[39]: 
0     True
1    False
dtype: bool
0 голосов
/ 13 ноября 2018

Вы передаете фрейму данных список списков. Он сравнивает целые числа со списками, поэтому не находит совпадений.

Определите ваши столбцы четко, как это, и это должно работать.

lists={'someList!':[1,2,12,6,'ABC'], 'someList2':[1000,4,'z','a','bob']}
0 голосов
/ 13 ноября 2018

Может кто-нибудь помочь мне понять, почему FALSE возвращается для первой строки?

Это не работает, потому что .isin(values) возвращает информацию о том, содержится ли каждый элемент в Серии вvalues.

Вы можете использовать {0, 1} в качестве набора и применять достоверность его пересечения к каждому списку:

>>> s = {0, 1}
>>> dfLists['someList!'].apply(lambda x: bool(s.intersection(x)))
0     True
1    False

Это эффективно:

>>> s.intersection([1, 2, 12, 6, 'ABC'])
{1}
>>> s.intersection([1000, 4, 'z', 'a', 'bob'])
set()

bool первого результата - True, потому что он не пустой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...