【问题标题】:Pandas dataframe ratio of difference of consecutive columns to first valuePandas 数据帧连续列差异与第一个值的比率
【发布时间】:2017-04-29 03:01:04
【问题描述】:

假设我有 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

怎么做?

【问题讨论】:

    标签: python sql pandas dataframe


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      执行你的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
      

      【讨论】:

        猜你喜欢
        • 2017-04-23
        • 2016-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-25
        相关资源
        最近更新 更多