Python 连续列与第一个值之差的数据帧比率

Python 连续列与第一个值之差的数据帧比率,python,sql,pandas,dataframe,Python,Sql,Pandas,Dataframe,假设我有数据帧(称为df) 我想要的是构建另一个数据帧,其中包含一个列,该列具有连续列(按列顺序连续)的差值与第一个值的比率 我可以很容易地得到上述比率(分子)的差值 这给了我 'name' 'level_1' 'quantity' 'A' 0 NaN 'A' 1 5 'A' 1 -10 'B' 1 NaN 'B' 2 4

假设我有数据帧(称为
df

我想要的是构建另一个数据帧,其中包含一个列,该列具有连续列(按列
顺序连续)的差值与第一个值的比率

我可以很容易地得到上述比率(分子)的差值

这给了我

'name'    'level_1'    'quantity'
'A'       0           NaN
'A'       1           5
'A'       1           -10
'B'       1           NaN
'B'       2           4
现在我要的是这个比率,正如描述的那样。具体来说,我想

'name'    'level_1'    'quantity'
'A'       1           NaN
'A'       2           0.5
'A'       3           -0.6666
'B'       1           NaN
'B'       2           2

如何计算?

您可以将结果除以df中移位的“数量”列:

diff_df.quantity = diff_df.quantity / df.quantity.shift(1)

执行
groupby
后,使用
pct\u change

# Sort the DataFrame, if necessary.
df = df.sort_values(['name', 'order'])

# Use groupby and pcnt_change on the 'quantity' column.
df['quantity'] = df.groupby('name')['quantity'].pct_change()
结果输出:

  name  order  quantity
0    A      1       NaN
1    A      2  0.500000
2    A      3 -0.666667
3    B      1       NaN
4    B      2  2.000000
# Sort the DataFrame, if necessary.
df = df.sort_values(['name', 'order'])

# Use groupby and pcnt_change on the 'quantity' column.
df['quantity'] = df.groupby('name')['quantity'].pct_change()
  name  order  quantity
0    A      1       NaN
1    A      2  0.500000
2    A      3 -0.666667
3    B      1       NaN
4    B      2  2.000000