将标签列添加到数据框

时间:2018-10-11 22:21:02

标签: python python-3.x pandas dataframe

我有一个数据框,其中获取股票数据(OHLC)和日期作为索引。但是,代码名称未在此处显示。 因此,数据看起来像这样:

                open      high       low     close     volume
date                                                         
2013-10-11   63.7003   64.5963   63.4609   64.4619   66934938
2013-10-14   64.0718   65.0855   64.0090   64.8841   65474542
2013-10-15   65.0757   65.6637   64.8161   65.2294   80018603
2013-10-16   65.5054   65.7330   65.3014   65.5478   62775013
2013-10-17   65.3995   66.0273   65.3602   65.9907   63398335
2013-10-18   66.1856   66.6133   66.1490   66.5649   72635570

我有一个股票代码的列表,并且我正在运行一个for循环以获取相同的代码,然后使用concat / append最终获取数据。但是,我想在此处添加股票代码。我该怎么做 ?

以下是最终输出:

                open      high       low     close     volume   ticker
date                                                         
2013-10-11   63.7003   64.5963   63.4609   64.4619   66934938   AAPL
2013-10-14   64.0718   65.0855   64.0090   64.8841   65474542   AAPL
2013-10-15   65.0757   65.6637   64.8161   65.2294   80018603   AAPL
2013-10-16   65.5054   65.7330   65.3014   65.5478   62775013   AAPL
2013-10-17   65.3995   66.0273   65.3602   65.9907   63398335   AAPL
.................
.................
.................
.................
2013-10-11  153.0422  154.3197  152.9154  154.2654  104967037   SPY
2013-10-14  153.3140  155.0083  153.1962  154.8815  111901876   SPY
2013-10-15  154.4919  155.0718  153.5496  153.7580  153958055   SPY
2013-10-16  154.6822  155.9869  154.6051  155.9053  161058684   SPY
2013-10-17  155.2711  157.0379  155.2439  156.9473  129004482   SPY

PS:我正在使用iexfinance库获取历史价格。

1 个答案:

答案 0 :(得分:2)

我对iexfinance库不熟悉。但是,假设您有一个神奇的函数get_data_from_ticker,顾名思义,该函数通过代码输入获得数据,可能作为pd.DataFrame对象。

给定列表tickers,您当前的过程可能类似于:

dfs = []
for ticker in tickers:
    data = get_data_from_ticker(ticker)
    dfs.append(data)
df = pd.concat(dfs)

如果代码信息未存储在数据框中,则此功能不是特别有用。因此,您可以使用pd.DataFrame.assign来添加一系列内容:

dfs = []
for ticker in tickers:
    data = get_data_from_ticker(ticker)
    dfs.append(data.assign(ticker=ticker))
df = pd.concat(dfs)

最后,您可以使用列表理解功能来提高效率:

dfs = [get_data_from_ticker(ticker).assign(ticker=ticker) for ticker in tickers]

df = pd.concat(dfs)