列中值之间的百分比增长

时间:2018-11-25 16:07:49

标签: python-3.x pandas dataframe percentage

假设我有一个如下所示的df:

x     name
12    q
1     q
3     q
383   z
31    z
21    z
 68   r
 32   r
 2    r

我需要计算每个名称的第一个值和最后一个值之间的百分比增长,所以结果应该像这样

x     name
300%   q
1723%  z
20%    r  

我尝试按名称使用第一组,但是现在我无法前进了。您有任何解决办法的想法吗?

感谢所有人的帮助

1 个答案:

答案 0 :(得分:1)

首先聚合firstlast函数,然后使用pct_change

df = (df.groupby('name')['x']
       .agg([('a','last'),('x','first')])
       .pct_change(axis=1)['x']
       .mul(100)
       .reset_index())
print (df)
  name            x
0    q   300.000000
1    r  3300.000000
2    z  1723.809524

另一种解决方案:

a = df.drop_duplicates('name', keep='last').set_index('name')['x']
b = df.drop_duplicates('name').set_index('name')['x']

df = b.sub(a).div(a).mul(100).round(2).reset_index()
print (df)
  name        x
0    q   300.00
1    z  1723.81
2    r  3300.00