在python中使用pandas将值添加到子列

时间:2019-01-02 02:20:25

标签: python pandas

如何在数据框中添加子列?

这是我到目前为止所拥有的...

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

1 个答案:

答案 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)