Để 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 bool
mả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
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