查找pandas数据框中的时差

时间:2018-01-11 18:23:01

标签: python pandas datetime

所以我有以下数据框架结构。

df = pd.DataFrame({'group':list('aaaabbbb'),
                   'value':[1,3,3,2,5,6,6,2],
                   'id':[1,1,2,2,2,3,3,3],
                   'datetime':pd.datetime('01/01/2011 01:00:00',
'01/01/2011 01:02:00',
'01/01/2011 01:05:00',
'01/01/2011 01:06:00',
'01/01/2011 03:00:00',
'01/01/2011 04:00:00',
'01/01/2011 05:00:00',
'01/01/2011 10:00:00')})
df

对于每个组和ID,我想说是商店和特许经营权,我想找到每个日期时间之间的差异。因此,我最终得到以下输出。

group   id   timediff
b       2    ...
b       3    ...

在我的用例中,我尝试过这样的事情,但没有得到理想的结果。

df.loc[df.id.isin([2,3])].sort_values(['group','hour','datetime']).groupby('id')['datetime'].diff()

预期产出:

在每个组中,假设id代表每个特许经营权。 我试图在id为2或3的那些之间找到AVERAGE日期时间的差异。

...所以

group   id   timediff.avg
b       2    ...
b       3    ...

对于商店a和特许经营2,差异的平均时间是......

1 个答案:

答案 0 :(得分:1)

这可能是你要找的 -

  1. 使用必需的id
  2. 查询相关行
  3. groupid列上的小组
  4. 找到diff
  5. 的小组datetime
  6. 从结果中提取总秒组件并找到其平均值
  7. 除以60以获得数小时的结果
  8. df.query("id in [2, 3]")\
      .set_index(['group', 'id'])\
      .groupby(level=[0, 1])\
      .datetime.diff()\
      .dt.total_seconds()\
      .dropna()\
      .mean(level=[0,1])\
      .div(60)
    
    group  id
    a      2       1.0
    b      3     180.0
    Name: datetime, dtype: float64