2016-07-07 9 views
0

私は現在、Python 2.7でPandasを使用しています。私のデータフレームは、次のようになります。python pandasリストを含むフィルタリング

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

それは列1の値で行をフィルタすることは可能ですか?たとえば、フィルタ値が2の場合、フィルタは最初の2行を含むデータフレームを返します。

私はすでにいくつかの方法を試しています。私が考えることができる最も良いことは、値が存在する行のインデックスを返すリストの理解を行うことです。次に、インデックスのリストを使ってデータフレームをフィルタリングすることができました。しかし、異なる値で複数回フィルタリングしたい場合、これは非常に遅いでしょう。理想的には、私は、プロセスをスピードアップするために、パンダの機能でビルドを使用するものが好きです。

+0

への答えに示すように、あなたは 'np.in1d'を使用することができます:[」 pandasフレーム列(別名pd.series)で配列要素の位置を見つける」(http://stackoverflow.com/questions/38083227/finding-an-array-elements-location-in-a-pandas-frame-column) -aka-pd-series)を使用して複数の値を検索します。 – Divakar

答えて

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] 
+0

恐ろしい!助けてくれてありがとう。これは私が持っていたよりもはるかに速く動作します。私は、df [0]のdf [2]と似たような答えがあると想像していました。 – darkyoda182

1

ます。また、リスト内包してブールインデックスを使用することができます。

>>> df[[2 in row for row in df['0']]] 
     0 
0 [1, 2] 
1 [2, 3] 
関連する問題