Процент роста между значениями в столбце - PullRequest
0 голосов
/ 25 ноября 2018

Допустим, у меня есть 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 голосов
/ 25 ноября 2018

Первый агрегат first и last функций, а затем используйте 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
...