我有一个数据框:
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
如何使用布尔数组从数据框中选择以获得如下结果:
High
Date
2009-02-11 30.20
2009-02-17 29.35
答案 0 :(得分:22)
对于使用两个DataFrame的索引,它们必须具有可比较的索引。在这种情况下,它不会起作用,因为一个DataFrame
具有整数索引,而另一个具有日期。
但是,正如您所说可以使用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
过滤器之前或之后):
df['High'][s.values]
# Or: df[s.values]['High']
获取目标输出(作为Series
):
2009-02-11 30.20
2009-02-17 29.35
Name: High, dtype: float64