Панды: сравнить объекты списка в серии - PullRequest
0 голосов
/ 01 ноября 2018

В моем фрейме данных столбец состоит из списков, например:

df = pd.DataFrame({'A':[[1,2],[2,4],[3,1]]})

Мне нужно выяснить расположение списка [1,2] в этом кадре данных. Я попробовал:

df.loc[df['A'] == [1,2]]

и

df.loc[df['A'] == [[1,2]]]

, но потерпел неудачу полностью. Сравнение кажется очень простым, но это просто не работает. Я что-то здесь упускаю?

Ответы [ 5 ]

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

Или:

df['A'].apply(([1,2]).__eq__)

Тогда:

df[df['A'].apply(([1,2]).__eq__)]
0 голосов
/ 01 ноября 2018

с массивами Numpy

df.assign(B=(np.array(df.A.tolist()) == [1, 2]).all(1))

        A      B
0  [1, 2]   True
1  [2, 4]  False
2  [3, 1]  False
0 голосов
/ 01 ноября 2018

Вы можете использовать apply и сравнивать как:

df['A'].apply(lambda x: x==[1,2])

0     True
1    False
2    False
Name: A, dtype: bool

print(df[df['A'].apply(lambda x: x==[1,2])])

        A
0  [1, 2]
0 голосов
/ 01 ноября 2018

Использование numpy

df.A.apply(lambda x: (np.array(x) == np.array([1,2])).all())

0     True
1    False
2    False
0 голосов
/ 01 ноября 2018

Не используйте list в ячейке, это создает много проблем для pandas. Если вам нужен столбец object, используйте tuple:

df.A.map(tuple).isin([(1,2)])
Out[293]: 
0     True
1    False
2    False
Name: A, dtype: bool
#df[df.A.map(tuple).isin([(1,2)])]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...