我有两个数据框:一个是每日股价(例如所有美国股票),另一个是指数的历史成分(例如标准普尔500)
我设法创建了一个for循环,检查每只股票,每天是否都是指数的一部分。然而,循环可能需要很长时间才能完成,因为每日价格DF有65000.000行,历史成分DF有15000行。我只尝试了DF的一些子集,代码满足了我的需要,但需要几天才能完成。循环的速度随着迭代次数的增加而逐渐降低,所以我认为我做的事情可能效率很低
DF1:收盘价
ticker date price
1 AAPL 2018 150.10
2 AAPL 2019 220.50
3 MSFT 2018 50.60
4 MSFT 2019 70.90
DF2:成分
ticker date
1 AMZN 2018
2 AAPL 2018
3 FB 2018
3 AMZN 2019
4 AAPL 2019
5 MSFT 2019
预期结果:
ticker date price in_index
1 AAPL 2018 150.10 yes
2 AAPL 2019 220.50 yes
3 MSFT 2018 50.60 no
4 MSFT 2019 70.90 yes
因此,2018年AAPL是指数的一部分,而MSFT则不是。2019年,AAPL和MSFT都是该指数的一部分
这是我的密码:
DF1['in_index'] = "no"
for row in range(len(DF1)):
ticker = DF1.loc[row].ticker
year = DF1.loc[row].year
aux = DF2[(DF2.tic==ticker) & (DF2.year==year)]
if len(aux) > 0:
DF1['in_index'].loc[row] = 1
有没有办法让这个循环更有效
使用
pandas.DataFrame.merge
的一种方法:输出:
将^{} 与} 连用
利用
indicator = True
和^{_merge
列相关问题 更多 >
编程相关推荐