Reputation: 385
In my dataframe a column is made up of lists, for example:
df = pd.DataFrame({'A':[[1,2],[2,4],[3,1]]})
I need to find out the location of list [1,2] in this dataframe. I tried:
df.loc[df['A'] == [1,2]]
and
df.loc[df['A'] == [[1,2]]]
but failed totally. The comparison seems very simple but that just doesn't work. Am I missing something here?
Upvotes: 19
Views: 19858
Reputation: 323226
Do not use list
in cell, it creates a lot of problem for pandas
. If you do need an object
column, using 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)])]
Upvotes: 20
Reputation: 38415
Using numpy
df.A.apply(lambda x: (np.array(x) == np.array([1,2])).all())
0 True
1 False
2 False
Upvotes: 6
Reputation: 71570
Or:
df['A'].apply(([1,2]).__eq__)
Then:
df[df['A'].apply(([1,2]).__eq__)]
Upvotes: 0
Reputation: 294228
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
Upvotes: 9
Reputation: 13255
You can use apply
and compare as:
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]
Upvotes: 15