Pandas - 列内的百分比差异

时间:2017-12-01 17:02:58

标签: python pandas

这与to this question密切相关 - 但我希望找到基于前一行的%差异,而不是示例中的第一行。

所以我的输入是

security    date        price
IBM         1/1/2016    100
IBM         1/2/2016    102
IBM         1/3/2016    108
AAPL        1/1/2016    1000
AAPL        1/2/2016    980
AAPL        1/3/2016    1050
AAPL        1/4/2016    1070

我的结果输出是

security    date        price   change
IBM         1/1/2016    100     NA
IBM         1/2/2016    102     2%
IBM         1/3/2016    108     5.8%
AAPL        1/1/2016    1000    NA
AAPL        1/2/2016    980     -2%
AAPL        1/3/2016    1050    7.14%
AAPL        1/4/2016    1070    1.9%

2 个答案:

答案 0 :(得分:3)

我们使用pct_change

df.groupby('security').price.pct_change()
Out[1393]: 
0         NaN
1    0.020000
2    0.058824
3         NaN
4   -0.020000
5    0.071429
6    0.019048
Name: price, dtype: float64

答案 1 :(得分:2)

使用groupby diff() / shift() * 100即

g = df.groupby('security')['price']

df['new'] = (g.diff()/g.shift())*100

  security      date  price       new
0      IBM  1/1/2016    100       NaN
1      IBM  1/2/2016    102  2.000000
2      IBM  1/3/2016    108  5.882353
3     AAPL  1/1/2016   1000       NaN
4     AAPL  1/2/2016    980 -2.000000
5     AAPL  1/3/2016   1050  7.142857
6     AAPL  1/4/2016   1070  1.904762