我们在一列中包含带有列表的数据框。无法找到简单的方法来过滤数据帧,因为行包含列表中的值。
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()这样的东西,反之亦然?获得所需行的最佳方法是什么?谢谢。
最简单的是使用qazxsw poi和qazxsw poi:
apply
但如果想检查in
创建df1 = df[df.lists.apply(lambda x: 'a' in x)]
,但它有点复杂:
a
另一种解决方案是使用DataFrame
和df1 = df[pd.DataFrame(df.lists.values.tolist()).eq('a').any(axis=1)]
:
str.join
str.contains
通过列表推导进行布尔索引是一种方式:
df1 = df[df.lists.str.join(',').str.contains('a')]
一些性能基准测试:
print (df1)
lists
0 [a, c]
1 [a, b, d]