迭代pandas dataframe的索引

时间:2018-01-15 04:16:06

标签: python pandas

假设我们有一个(为简单起见)历史股票数据表,其中包含

等列
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

1 个答案:

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