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

时间:2016-12-13 22:13:44

标签: python sql pandas dataframe

假设我有DataFrame(名为df

'name'    'order'    'quantity'
'A'       1           10
'A'       2           15
'A'       3           5
'B'       1           2
'B'       2           6

我想要的是构建另一个数据框,其中包含一个列,其中连续列的差异(按列order连续)与第一个值的比率。

我很容易将所述比率(分子)的差异检索为

def compute_diff(x):

    quantity_diff = x.quantity.diff()

    return quantity_diff

diff_df = df.sort_values('order').groupby('name').apply(compute_diff).reset_index(name='diff')

这给了我

'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

如何?

2 个答案:

答案 0 :(得分:4)

执行groupby后,请使用pct_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

答案 1 :(得分:1)

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

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