所以我有以下数据框架结构。
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,差异的平均时间是......
答案 0 :(得分:1)
这可能是你要找的 -
id
group
和id
列上的小组diff
列datetime
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