2016-05-21 26 views
8

Ho un dataframe:scegliere tra i panda dataframe utilizzando booleano serie/array

   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 

e una serie booleano:

 bools 
1 True 
2 False 
3 False 
4 True 
5 False 

come potrei selezionare dal dataframe utilizzando l'array booleano per ottenere risultato Mi piace:

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

risposta

10

Per l'indicizzazione di lavorare con due DataFrames devono avere indici comparabili. In questo caso non funzionerà perché uno DataFrame ha un indice intero, mentre l'altro ha le date.

Tuttavia, come dici tu possibile filtro con un boolserie. È possibile accedere all'array per Series tramite .values. Questo può essere quindi applicato come filtro come segue:

df # pandas.DataFrame 
s # pandas.Series 

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

Ad esempio, con i tuoi dati:

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] 

restituisce il seguente:

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

se si desidera solo la colonna alta , puoi filtrarlo normalmente (prima, o dopo il filtro bool):

df['High'][s.values] 
# Or: df[s.values]['High'] 

Per ottenere l'output di destinazione (come Series):

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

Così, l'indice è il problema. Grazie! È stupefacente! Scusate per il ritardo. : D – Osora

Problemi correlati