将行添加到具有多索引的DataFrame中

问题描述 投票:0回答:1

我想在每个日期创建一个新的DataFrame和一堆库存数据。

  1. 声明一个具有多索引的DataFrame-日期和股票行情自动收录器。

  2. 添加2020-06-07的数据

            date        stock   open    high    low     close
            2020-06-07  AAPL   33.50    34.20   32.1    33.30
            2020-06-07  MSFT   53.50    54.20   32.1    53.30
    
  3. 添加2020-06-08的数据

            date        stock   open    high    low     close
            2020-06-07  AAPL   33.50    34.20   32.1    33.30
            2020-06-07  MSFT   53.50    54.20   32.1    53.30
            2020-06-08  AAPL   32.50    34.20   31.1    32.30
            2020-06-08  MSFT   58.50    59.20   52.1    53.30
    

什么是最好和最有效的解决方案?

这是我当前的版本,无法正常运行。

            df = pd.DataFrame()
            for date in dates:
                universe500 = get_universe(date) #returns stocks on a specific date
                for security in universe500:
                    prices = data.get_prices(security, ['open','high','low','close'], 1, '1d') # returns pd.DataFrame
                    df.iloc[(date, security),:] = prices
python pandas dataframe multi-index
1个回答
0
投票

如果prices是与原始DataFrame相同格式的df,则可以使用concat

In[0]:

#consttucting a fake entry
arrays = [['06-07-2020'], ['ABCD']]
multi = pd.MultiIndex.from_arrays(arrays, names=('date', 'stock'))
to_add = pd.DataFrame({'open':1, 'high':2, 'low':3, 'close':4},index=multi)
print(to_add)

Out[0]:
                  open  high  low  close
date       stock                        
2020-06-09 ABCD      1     2    3      4
In[1]:

#now adding to your data
df = pd.concat([df, to_add])
print(df)

Out[1]:
                  open  high   low  close
date       stock                         
2020-06-07 AAPL   33.5  34.2  32.1   33.3
           MSFT   53.5  54.2  32.1   53.3
2020-06-08 AAPL   32.5  34.2  31.1   32.3
           MSFT   58.5  59.2  52.1   53.3
2020-06-09 ABCD    1.0   2.0   3.0    4.0

如果数据(prices)只是4个数字(开,高,低和关闭)值的数组,则loc将在您使用iloc的位置起作用:

In[2]:

df.loc[('2020-06-10','WXYZ'),:] = [10,20,30,40]

Out[2]:

                  open  high   low  close
date       stock                         
2020-06-07 AAPL   33.5  34.2  32.1   33.3
           MSFT   53.5  54.2  32.1   53.3
2020-06-08 AAPL   32.5  34.2  31.1   32.3
           MSFT   58.5  59.2  52.1   53.3
2020-06-09 ABCD    1.0   2.0   3.0    4.0
2020-06-10 WXYZ   10.0  20.0  30.0   40.0
© www.soinside.com 2019 - 2024. All rights reserved.