我目前在python 2.7中使用Pandas。我的数据框看起来与此类似:
>>> df
0
1 [1, 2]
2 [2, 3]
3 [4, 5]
是否可以按第1列中的值过滤行?例如,如果我的过滤器值为2,则过滤器应返回包含前两行的数据框。
我已经尝试了几种方法。我能想到的最好的事情是做一个列表推导,它返回值存在的行的索引。然后,我可以使用索引列表过滤数据帧。但是,如果我想用不同的值过滤多次,这将非常慢。理想情况下,我想要使用Pandas函数中的构建来加速该过程。
答案 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]