假设我们有一个(为简单起见)历史股票数据表,其中包含
等列timestamp ticker open high low close
我希望有一个列具有该日期的股票回报百分比。
现在,显而易见的第一步是制作时间戳和自动收报机的多索引,然后对于每个自动收报机,可以执行以下操作:
df.loc[idx[:, ['AAPL']], idx['ret']]=df.loc[idx[:, ['AAPL']], idx['close']].pct_chg()
不清楚的是如何以最优雅的方式迭代代码。一个人可以列出代码,然后只做一个普通的python for循环,在上面迭代所有这些,但这看起来有点笨重。是否有更多的“熊猫”方式呢?
要回答评论,为简单起见,让我们关闭,并假设数据看起来像
date ticker close
Jan 1 A 10
Jan 2 A 20
Jan 3 A 30
Jan 1 B 15
Jan 2 B 15
Jan 3 B 7.5
结果应为
date ticker close return
Jan 1 A 10 NaN
Jan 2 A 20 1.0
Jan 3 A 30 0.5
Jan 1 B 15 NaN
Jan 2 B 15 0
Jan 3 B 7.5 -0.5
答案 0 :(得分:2)
看起来简单的groupby
+ pct_change
调用就足够了。
df['return'] = df.groupby(['ticker']).close.pct_change()
df
date ticker close return
0 Jan 1 A 10.0 NaN
1 Jan 2 A 20.0 1.0
2 Jan 3 A 30.0 0.5
3 Jan 1 B 15.0 NaN
4 Jan 2 B 15.0 0.0
5 Jan 3 B 7.5 -0.5
亚历山大在评论中提出了一个很好的观点。您的数据应按日期和自动收报机排序,以便进行此操作。如果不是,请先进行sort_values
电话 -
df = df.sort_values(['date', 'ticker'])