大熊猫根据不同的值移动来计算百分比

Vin*_*ort 2 python dataframe pandas

我试图计算数据帧中第一个下降的百分比.

这是数据帧

        down  distance
1        1.0      10.0
2        2.0      13.0
3        3.0      15.0
4        3.0      20.0
5        4.0       1.0
6        1.0      10.0
7        2.0       9.0
8        3.0       3.0
9        1.0      10.0
Run Code Online (Sandbox Code Playgroud)

我想计算从第一次下降的百分比,意味着第二次下降,获得的码数百分比是多少.对于第三次下降,基于第一次的第三次perc.

例如,我想有以下输出.

        down  distance    percentage

1        1.0      10.0    NaN
2        2.0      13.0    (13-10)/13
3        3.0      15.0    (15-10)/15
4        3.0      20.0    (20-10)/20
5        4.0       1.0    (1-10)/20
6        1.0      10.0    NaN       # New calculation
7        2.0       9.0    (9-10)/9
8        3.0       3.0    (3-10)/3
9        1.0      10.0    NaN
Run Code Online (Sandbox Code Playgroud)

谢谢

目前的解决方案都能正确解决第一个问题.

jpp*_*jpp 5

这是一个矢量化解决方案:

# define condition
cond = df['down'] == 1

# calculate value to subtract
first = df['distance'].where(cond).ffill().mask(cond)

# perform calculation
df['percentage'] = (df['distance'] - first) / df['distance']

print(df)

   down  distance  percentage
1   1.0      10.0         NaN
2   2.0      13.0    0.230769
3   3.0      15.0    0.333333
4   3.0      20.0    0.500000
5   4.0       1.0   -9.000000
6   1.0      10.0         NaN
7   2.0       9.0   -0.111111
8   3.0       3.0   -2.333333
9   1.0      10.0         NaN
Run Code Online (Sandbox Code Playgroud)