如何在数据框中添加子列?
这是我到目前为止所拥有的...
start_date = datetime.today() - timedelta(days=252)
end_date = datetime.today()
stock_list = ['TSLA', 'XOM', 'AAPL']
data = iex.stocks.get_historical_data(stock_list, start_date, end_date, filter=['close'], output_format='pandas')
print(data.head())
data['TSLA']['sma50'] = data['TSLA']['close'].rolling(50).mean()
我收到此错误: 试图在DataFrame的切片副本上设置一个值。 尝试改用.loc [row_indexer,col_indexer] =值
这是数据:
TSLA XOM AAPL
open high low close volume open high low close volume open high low close volume
date
2018-04-25 283.50 285.16 277.25 280.690 4013574 75.8561 77.2335 75.1625 77.1171 13865599 160.8679 163.6377 160.6602 161.8868 28382084
2018-04-26 278.75 285.79 276.50 285.480 4356013 77.2141 78.4751 77.1462 78.4363 14554442 162.3518 163.9444 161.6098 162.4507 27963014
2018-04-27 285.37 294.47 283.83 294.075 4364626 74.6435 76.2926 74.1876 75.4584 16346833 162.2330 162.5595 158.8994 160.5711 35655839
2018-04-30 293.61 298.73 292.50 293.900 4228172 75.5748 76.2053 75.4099 75.4196 15028835 160.3834 165.4579 160.0963 163.4795 42427424
2018-05-01 293.51 300.82 293.22 299.920 4625603 74.9443 74.9443 73.7026 74.6435 16231035 164.6173 167.3770 163.4894 167.2781 53569376
期望输出
TSLA XOM AAPL
open high low close volume sma50 open high low close volume sma50 open high low close volume sma50
答案 0 :(得分:0)
查看熊猫的“分层索引(MultiIndex)”功能。 您应该创建一个像这样的元组数组:
macOS Mojave
java version "1.8.0_45"
spark 2.3.1
scala 2.11.12
python 3.6.0
以及元组中每个组的新值数组:
index = [('TSLA', 'open'), ('TSLA', 'high'),
('TSLA', 'low'), ('TSLA', 'close'),('XOM', 'open'), ('XOM', 'high'),
('XOM', 'low'), ('XOM', 'close')] #etc for all of youe stcks....
然后您应该像这样调用熊猫的Multiindex函数:
values = [283.50, 285.16] #etc for all values...
然后通过调用获得所需的数据框:
index = pd.MultiIndex.from_tuples(index)