<p>下一行将帮助您按<em>用户</em>和<em>日期</em>和<em>小时</em>分组(仅供参考)。如果改为使用<code>df['fini'].dt.hour</code>,则它会将多天中同一小时的值相加):</p>
<pre><code>df.groupby([df['usuario'], df['fini'].apply(lambda x: x.round('h'))]).delta.sum()
</code></pre>
<p>将此应用于示例的扩展版本:</p>
<pre><code>d = {
'usuario':['USER-1','USER-1','USER-1','USER-1','USER-1','USER-1','USER-1','USER-1','USER-1','USER-1','USER-2','USER-2'],
'feature':['PROGRAM-1','PROGRAM-1','PROGRAM-1','PROGRAM-1','PROGRAM-1','PROGRAM-1','PROGRAM-1','PROGRAM-1','PROGRAM-2','PROGRAM-2','PROGRAM-1','PROGRAM-1'],
'fini':['2016-06-30 21:03:21','2016-06-30 21:09:20','2016-06-30 21:14:40','2016-06-30 21:16:42','2016-06-30 21:18:09', '2016-06-30 22:03:21','2016-06-30 22:09:20','2016-07-01 21:03:21','2016-07-01 22:09:20','2016-07-01 23:14:40','2016-06-30 17:16:42','2016-06-30 18:18:09'],
'ffin':['2016-06-30 21:03:34','2016-06-30 21:09:32','2016-06-30 21:15:34','2016-06-30 21:17:24','2016-06-30 21:18:21', '2016-06-30 22:04:02','2016-06-30 22:09:51','2016-07-01 21:03:43','2016-07-01 22:10:12','2016-07-01 23:15:03','2016-06-30 17:17:23','2016-06-30 18:18:19']
}
df = pd.DataFrame(data=d)
date_cols = ['fini', 'ffin']
for col in date_cols:
df[col] = pd.to_datetime(df[col])
df['delta'] = df['ffin'] - df['fini']
df.groupby([df['usuario'], df['fini'].apply(lambda x: x.round('h'))]).delta.sum()
</code></pre>
<p>输出如下:</p>
<pre><code>usuario fini
USER-1 2016-06-30 21:00:00 00:02:13
2016-06-30 22:00:00 00:01:12
2016-07-01 21:00:00 00:00:22
2016-07-01 22:00:00 00:00:52
2016-07-01 23:00:00 00:00:23
USER-2 2016-06-30 17:00:00 00:00:41
2016-06-30 18:00:00 00:00:10
Name: delta, dtype: timedelta64[ns]
</code></pre>
<p>另外,如果需要,向groupby添加功能也很简单:</p>
<pre><code>df.groupby([df['usuario'], df['feature'], df['fini'].apply(lambda x: x.round('h'))]).delta.sum()
</code></pre>
<p>输出:</p>
<pre><code>usuario feature fini
USER-1 PROGRAM-1 2016-06-30 21:00:00 00:02:13
2016-06-30 22:00:00 00:01:12
2016-07-01 21:00:00 00:00:22
PROGRAM-2 2016-07-01 22:00:00 00:00:52
2016-07-01 23:00:00 00:00:23
USER-2 PROGRAM-1 2016-06-30 17:00:00 00:00:41
2016-06-30 18:00:00 00:00:10
Name: delta, dtype: timedelta64[ns]
</code></pre>