2016-05-21 9 views
8

を使用して:を選択し、私はデータフレームを持つブールシリーズ/配列

   High Low Close 
Date       
2009-02-11 30.20 29.41 29.87 
2009-02-12 30.28 29.32 30.24 
2009-02-13 30.45 29.96 30.10 
2009-02-17 29.35 28.74 28.90 
2009-02-18 29.35 28.56 28.92 

とブールシリーズ:

私は結果を得るために、ブール配列を使用してデータフレームから選択することができる方法
 bools 
1 True 
2 False 
3 False 
4 True 
5 False 

like:

   High 
Date       
2009-02-11 30.20 
2009-02-17 29.35 

答えて

10

2つのDataFramesでインデックスを作成するには、同等のインデックスが必要です。この場合、1つのDataFrameは整数インデックスを持ち、もう1つは日付を持つため、動作しません。あなたはあなたのbool配列を使用してフィルタを言うようしかし

、。配列Seriesには.valuesでアクセスできます。例えば

df # pandas.DataFrame 
s # pandas.Series 

df[s.values] # df, filtered by the bool array in s 

を、あなたのデータを::

import pandas as pd 

df = pd.DataFrame([ 
      [30.20, 29.41, 29.87], 
      [30.28, 29.32, 30.24], 
      [30.45, 29.96, 30.10], 
      [29.35, 28.74, 28.90], 
      [29.35, 28.56, 28.92], 
     ], 
     columns=['High','Low','Close'], 
     index=['2009-02-11','2009-02-12','2009-02-13','2009-02-17','2009-02-18'] 
     ) 

s = pd.Series([True, False, False, True, False], name='bools') 

df[s.values] 

は、次の値を返します。

  High Low  Close 
2009-02-11 30.20 29.41 29.87 
2009-02-17 29.35 28.74 28.90 

あなただけのハイコラムをしたい場合は、次のようにこれは、フィルタを適用することができますこれを通常通り(boolフィルタの前または後)にフィルタリングできます。

​​

Seriesとして)あなたのターゲット出力を取得するには:

2009-02-11 30.20 
2009-02-17 29.35 
Name: High, dtype: float64 
+0

ので、インデックスが問題です。ありがとうございました!それは素晴らしいです!遅刻してすみません。 :D – Osora

関連する問題