python pandas过滤涉及列表

时间:2016-07-07 16:07:10

标签: python pandas

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

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

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

我已经尝试了几种方法。我能想到的最好的事情是做一个列表推导,它返回值存在的行的索引。然后,我可以使用索引列表过滤数据帧。但是,如果我想用不同的值过滤多次,这将非常慢。理想情况下,我想要使用Pandas函数中的构建来加速该过程。

2 个答案:

答案 0 :(得分:2)

您可以使用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]

答案 1 :(得分:1)

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

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