Sean
Sean

Reputation: 3450

Selecting rows of a DataFrame according to whether an element is in a column's list

I currently have a DataFrame like such:

      col1      col2            col3
 0     0         1         ['a', 'b', 'c']
 1     2         3         ['d', 'e', 'f']
 2     4         5         ['g', 'h', 'i']

what I want to do is select the rows where a certain value is contained in the lists of col3. For example, the code I would initially run is:

df.loc['a' in df['col3']]

but I get the following error:

KeyError: False

I've taken a look at this question: KeyError: False in pandas dataframe but it doesn't quite answer my question. I've tried the suggested solutions in the answers and it didn't help.

How would I go about this issue? Thanks.

Upvotes: 1

Views: 55

Answers (2)

gokaai
gokaai

Reputation: 91

Use:

df = df[df.testc.map(lambda x: 'a' in x)]

Upvotes: 0

jezrael
jezrael

Reputation: 863701

Use list comprehension for test each list:

df1 = df[['a' in x for x in df['col3']]]
print (df1)
   col1  col2       col3
0     0     1  [a, b, c]

Or use Series.map:

df1 = df[df['col3'].map(lambda x: 'a' in x)]
#alternative
#df1 = df[df['col3'].apply(lambda x: 'a' in x)]

Or create DataFrame and test by DataFrame.eq with DataFrame.any:

df1 = df[pd.DataFrame(df['col3'].tolist()).eq('a').any(axis=1)]

Upvotes: 2

Related Questions