列中值之间的百分比增长
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
假设我有一个如下所示的 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