python - 使用多索引在 DataFrame 中添加一行
问题描述
我想在每个日期创建一个新的 DataFrame 和一堆股票数据。
使用多索引 - 日期和股票代码声明 DataFrame。
添加 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
添加 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
解决方案
如果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
推荐阅读
- scheme - 在 script-fu (TinyScheme) 中连接字符串和变量
- php - 图像上传和显示
- asp.net-mvc-5 - 在生产环境中的 ASP.NET MVC 5 中的 URL 中隐藏项目名称
- javascript - Angular 应用程序仅在第二次点击事件后重定向
- ubuntu - 如何防止 Jenkins 在启动 Ubuntu 16.04 时自动启动?
- regex - 在 SED 中使用包含正则表达式的变量
- android - RecyclerView、适配器、点击监听和AsyncTask
- cookies - LastPass chrome 扩展程序在隐身模式下打开后如何记住登录用户?
- python-3.x - 确定顶点列表是否是通过图的路径
- c# - 远程计算机上的 wmi 模拟为当前登录用户