首页 文章

如何计算具有条件的连续pandas数据帧行之间的日差异

提问于
浏览
5

我有一个像下面的熊猫数据帧..

item_id        date
  101     2016-01-05
  101     2016-01-21
  121     2016-01-08
  121     2016-01-22
  128     2016-01-19
  128     2016-02-17
  131     2016-01-11
  131     2016-01-23
  131     2016-01-24
  131     2016-02-06
  131     2016-02-07

我想计算日期列之间的天差,但是关于 item_id 列 . 首先,我想在item_id上使用日期分组对数据帧进行排序 . 它看起来应该是这样的

item_id        date     
  101     2016-01-05         
  101     2016-01-08         
  121     2016-01-21         
  121     2016-01-22         
  128     2016-01-17         
  128     2016-02-19
  131     2016-01-11
  131     2016-01-23
  131     2016-01-24
  131     2016-02-06
  131     2016-02-07

然后我想计算再次分组的日期之间的差异 item_id 所以输出应该如下所示

item_id        date      day_difference 
  101     2016-01-05          0
  101     2016-01-08          3
  121     2016-01-21          0
  121     2016-01-22          1
  128     2016-01-17          0
  128     2016-02-19          2
  131     2016-01-11          0
  131     2016-01-23          12
  131     2016-01-24          1
  131     2016-02-06          13 
  131     2016-02-07          1

为了排序,我使用了这样的东西

df.groupby('item_id').apply(lambda x: new_df.sort('date'))

但是,它没有成功 . 我可以通过以下方法计算连续行之间的差异

(df['date'] - df['date'].shift(1))

但是不能用 item_id 进行分组

1 回答

  • 8

    我想你可以用:

    df['date'] = df.groupby('item_id')['date'].apply(lambda x: x.sort_values())
    
    df['diff'] = df.groupby('item_id')['date'].diff() / np.timedelta64(1, 'D')
    df['diff'] = df['diff'].fillna(0)
    print df
        item_id       date  diff
    0       101 2016-01-05     0
    1       101 2016-01-21    16
    2       121 2016-01-08     0
    3       121 2016-01-22    14
    4       128 2016-01-19     0
    5       128 2016-02-17    29
    6       131 2016-01-11     0
    7       131 2016-01-23    12
    8       131 2016-01-24     1
    9       131 2016-02-06    13
    10      131 2016-02-07     1
    

相关问题