2016-03-31 9 views
1

私は2つの質問があり、両方とも太字の下のポストにあります。パンダ:ブール値/述語検索の好きなイディオム

from pandas import DataFrame 

df_1 = DataFrame ({ 
     "x" : ["a - {}".format(i) for i in range(2)] + 
       ["b - {}".format(i) for i in range(2)] , 
     "y" : range(4) 
    }) 
df_1 

enter image description here

私はx値は文字 "A" で開始されたすべての行を望んでいたとします。

このDataFrame考えてみましょう

このような検索には次のイディオムが適していますか?私はパンダで見つける

df_1[df_1["x"].apply(lambda val : val.startswith("a"))] 

enter image description here

ことの一つは、一度、意味のあるデータがDataFrame指標となる、特にそれを照会、それで物事を行うには困難であるということです。我々が今持っていると仮定します。

df_2 = df_1.set_index(["x"], drop=True) 
df_2 

enter image description here

私はそれが同じ検索を行うに見つけ、より多くの仕事は、私は、インデックスを探していた場合に関与しています。

このような検索には次のイディオムが適していますか?どちらの場合も

df_2.iloc[[i for i,val in enumerate(df_2.index.tolist()) if val.startswith("a")], :] 

enter image description here

答えて

1

、私はベクトル化.str.startswith(...)メソッドを使用します。必ずしもそれほど効果的ではなく、より洗練されたものです。詳細については、を参照してください。

In [22]: df_1[df_1["x"].str.startswith("a")] 
Out[22]: 
     x y 
0 a - 0 0 
1 a - 1 1 

In [23]: df_2[df_2.index.str.startswith('a')] 
Out[23]: 
     y 
x  
a - 0 0 
a - 1 1 
+0

私はこれらの 'str'メソッドを認識していませんでした。これはまったく新しい世界を開きます。どうも! –

関連する問題