根据元素是否在列列表中选择DataFrame的行

时间:2019-12-09 10:32:27

标签: python pandas

我目前有一个像这样的DataFrame:

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

我要做的是选择col3列表中包含某个值的行。例如,我最初运行的代码是:

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

但出现以下错误:

KeyError: False

我看了一个问题:KeyError: False in pandas dataframe,但并不能完全回答我的问题。我已经尝试了答案中建议的解决方案,但没有帮助。

我将如何处理此问题?谢谢。

2 个答案:

答案 0 :(得分:2)

使用列表理解来测试每个列表:

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

或使用

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

或创建DataFrame并通过Series.mapDataFrame.eq进行测试:

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

答案 1 :(得分:0)

使用:

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