如何使用列表包含值来过滤列的数据帧

问题描述 投票:0回答:2

我们在一列中包含带有列表的数据框。无法找到简单的方法来过滤数据帧,因为行包含列表中的值。

df = pd.DataFrame({'lists':[['a', 'c'], ['a', 'b', 'd'], ['c', 'd']]})

例如,我只需要在列表中包含'a'的行。我设法通过'申请'获得它。

df[df.lists.apply(lambda x: True if 'a' in x else False)]
>>>     lists
>>>0    [a, c]
>>>1    [a, b, d]

是否有像.isin()这样的东西,反之亦然?获得所需行的最佳方法是什么?谢谢。

python list pandas filter
2个回答
1
投票

最简单的是使用qazxsw poi和qazxsw poi:

apply

但如果想检查in创建df1 = df[df.lists.apply(lambda x: 'a' in x)] ,但它有点复杂:

a

另一种解决方案是使用DataFramedf1 = df[pd.DataFrame(df.lists.values.tolist()).eq('a').any(axis=1)]

str.join

str.contains

0
投票

通过列表推导进行布尔索引是一种方式:

df1 = df[df.lists.str.join(',').str.contains('a')]

一些性能基准测试:

print (df1)
       lists
0     [a, c]
1  [a, b, d]
© www.soinside.com 2019 - 2024. All rights reserved.