我有以下数据框 -
ID Name Distance Time Base Height
1 A 10 2 12 2
2 A 20 4 14 3
3 B 30 6 16 4
4 B 40 8 18 5
5 C 50 10 20 6
6 C 60 12 22 8
我想创建新列Speed、Tarea、Speed_ratio、Tarea_ratio
,其值源自名称为A,B,C
的行中的值,如下 -
ID Name Distance Time Base Height Speed Tarea Speed_ratio Tarea_ratio
1 A 10 2 12 2 5 12 1 0.5714
2 A 20 4 14 3 5 21 NA NA
3 B 30 6 16 4 5 32 1 0.7111
4 B 40 8 18 5 5 45 NA NA
5 C 50 10 20 6 5 60 1 0.6818
6 C 60 12 22 8 5 88 NA NA
这可以做到吗?谢谢。
最佳答案
您可以执行以下操作:
In [431]: df['Speed'] = df.Distance.div(df.Time)
In [433]: df['Tarea'] = df.Base.mul(df.Height)/2
In [447]: df['Speed_ratio'] = df.Speed / df.groupby('Name').Speed.shift(-1)
In [450]: df['Tarea_ratio'] = df.Tarea / df.groupby('Name').Tarea.shift(-1)
In [451]: df
Out[451]:
ID Name Distance Time Base Height Speed Tarea Speed_ratio Tarea_ratio
0 1 A 10 2 12 2 5.0 12.0 1.0 0.571429
1 2 A 20 4 14 3 5.0 21.0 NaN NaN
2 3 B 30 6 16 4 5.0 32.0 1.0 0.711111
3 4 B 40 8 18 5 5.0 45.0 NaN NaN
4 5 C 50 10 20 6 5.0 60.0 1.0 0.681818
5 6 C 60 12 22 8 5.0 88.0 NaN NaN
关于python - Pandas - 如何创建从连续两行中的值派生的新列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64691558/