按索引,选择条件和选择列一起过滤pandas数据帧

时间:2015-09-27 08:31:07

标签: python pandas plot

我有一个数据框,其中包含来自多个股票的股票价格。

我能够过滤数据框,以便它只显示stock_name =“BHP”,因此它只显示这个月的数据。

当我加载数据帧(df)时,它有很多列。但我只需要关闭列和索引来绘制图表。如何添加到此查询以便选择的内容为:

1)stock_name ==必和必拓 2)日期=九月 3)AND仅显示1]“close”和2]索引(索引已经是日期时间索引)

这一行查询满足第一和第二条标准:

bhp = df[(df["stock_name"]=="BHP")]["2015-09-01":"2015-09-25"]

然而,当我尝试第三次添加列的列表时,我得到一个系列而不是带有绘图索引的数据框:

bhp = df[(df["stock_name"]=="BHP")]["2015-09-01":"2015-09-25"]["close"]

我将日期作为索引,如果有帮助的话,它就是自己的列。

1 个答案:

答案 0 :(得分:0)

我在工作中做了很多这方面的工作。在处理股票和时间维度时,我们通常使用DATExSTOCKxVALUE概念。您的列是库存而您的索引是日期,而值是单个因子。收盘价只是一个时间序列,列是stock_names。

转过来:

date        stock    close
2015-08-31   ibm      1.0
2015-08-31   aapl     1.0
2015-08-31   goog     1.0
2015-08-31   bhp      1.0
....

进入此(价值仅为“收盘价”)

date        aapl    ibm    goog    bhp    ...
2015-08-31   1.0    1.0     1.0    1.0    ...
2015-08-31   1.0    1.0     1.0    1.0    ...

尝试这种类型的代码:

close_px = df.set_index(['date', 'stock_name'])['close']  # Multiindex Series
bhp = close_px.unstack(level='stock_name')['BHP']  # Stocks as columns, timeseries index, then subset to BHP
res = bhp.loc["2015-09-01", "2015-09-25"]  # Access the rows like a standard timeseries

如果您有多个股票,第二行为您提供了一个非常容易通过股票名称访问的收盘价时间序列。