列中值之间的百分比增长

Percentage growth between values in column

假设我有一个如下所示的 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  

我尝试按名称使用第一个组,但现在无法继续。你知道如何解决它吗?

感谢大家的帮助

第一次聚合first and last functions and then use 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