【问题标题】:python pandas filtering involving listspython pandas过滤涉及列表
【发布时间】:2026-01-11 04:50:02
【问题描述】:

我目前在 python 2.7 中使用 Pandas。我的数据框看起来与此类似:

>>> df
        0
1  [1, 2]
2  [2, 3]
3  [4, 5]

是否可以按 in 第 1 列的值过滤行?例如,如果我的过滤器值为 2,则过滤器应返回包含前两行的数据框。

我已经尝试了几种方法。我能想到的最好的事情是做一个列表理解,它返回值所在的行的索引。然后,我可以使用索引列表过滤数据框。但是,如果我想用不同的值多次过滤,这将非常慢。理想情况下,我想要使用内置 Pandas 函数的东西来加快进程。

【问题讨论】:

标签: python pandas


【解决方案1】:

你可以使用boolean indexing:

import pandas as pd

df = pd.DataFrame({'0':[[1, 2],[2, 3], [4, 5]]})
print (df)
        0
0  [1, 2]
1  [2, 3]
2  [4, 5]

print (df['0'].apply(lambda x: 2 in x))
0     True
1     True
2    False
Name: 0, dtype: bool

print (df[df['0'].apply(lambda x: 2 in x)])
        0
0  [1, 2]
1  [2, 3]

【讨论】:

  • 太棒了!谢谢您的帮助。这比我所拥有的要快得多。我在想象会有一个看起来类似于 df[2 in df[0]] 的答案。
【解决方案2】:

您还可以将布尔索引与列表推导结合使用:

>>> df[[2 in row for row in df['0']]]
        0
0  [1, 2]
1  [2, 3]

【讨论】:

    最近更新 更多