2016-05-21 34 views
8

Tôi có một dataframe:Chọn từ gấu trúc dataframe sử dụng boolean loạt/mảng

   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 

và một loạt boolean:

 bools 
1 True 
2 False 
3 False 
4 True 
5 False 

làm thế nào tôi có thể chọn từ các dataframe sử dụng các mảng boolean để có được kết quả như:

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

Trả lời

10

Để lập chỉ mục làm việc với hai DataFrames, chúng phải có chỉ mục tương đương. Trong trường hợp này, nó sẽ không hoạt động vì một số DataFrame có chỉ số nguyên, còn số còn lại có ngày tháng.

Tuy nhiên, như bạn nói bạn có thể bộ lọc bằng cách sử dụng boolmảng. Bạn có thể truy cập mảng cho một số Series qua .values. Điều này sau đó có thể được áp dụng như một bộ lọc như sau:

df # pandas.DataFrame 
s # pandas.Series 

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

Ví dụ, với dữ liệu của bạn:

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] 

Trả sau:

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

Nếu bạn chỉ muốn cột cao , bạn có thể lọc thông tin này như bình thường (trước hoặc sau bộ lọc bool):

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

Để có được đầu ra của bạn mục tiêu (như là một Series):

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

Vì vậy, chỉ số là vấn đề. Cảm ơn bạn! Thật ngạc nhiên! Xin lỗi vì đến muộn. : D – Osora

Các vấn đề liên quan