1

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.

Sean
  • 2,890
  • 8
  • 36
  • 78

2 Answers2

2

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)]
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252
0

Use:

df = df[df.testc.map(lambda x: 'a' in x)]
gokaai
  • 91
  • 7