gpt4 book ai didi

python - 计算用户的时间增量

转载 作者:行者123 更新时间:2023-11-30 21:56:45 24 4
gpt4 key购买 nike

我有用户 session ID 和发生某些事件的 session ID 的时间戳。我想计算第一个事件和最后一个事件之间的时间。请参阅下面的示例:

session_id   timestamp
sess1 2018-11-05 14:28:25.260
sess2 2018-11-04 12:14:59.576
sess2 2018-11-04 11:55:00.584
sess2 2018-11-04 12:16:44.702
sess3 2018-11-04 12:04:37.419

我想计算 sess2 的第一个和最后一个时间戳之间的差异以及所有其他 session_id,如下所示:

session_id   timeSpent
sess1 1
sess2 125 (for example)
sess3 1

如何计算?

最佳答案

用途:

#convert column to datetimes if necessary
df['timestamp'] = pd.to_datetime(df['timestamp'])

#aggregate min and max
df1 = df.groupby('session_id')['timestamp'].agg(['min','max'])
#subtract to new column
df1['timeSpent'] = df1.pop('max') - df1.pop('min')
df1 = df1.reset_index()
print (df1)
session_id timeSpent
0 sess1 00:00:00
1 sess2 00:21:44.118000
2 sess3 00:00:00

单行解决方案 GroupBy.agg和元组:

df1 = (df.groupby('session_id')['timestamp']
.agg([('timeSpent', lambda x: x.max() - x.min())])
.reset_index())
print (df1)
session_id timeSpent
0 sess1 00:00:00
1 sess2 00:21:44.118000
2 sess3 00:00:00

如果需要以秒为单位的输出,则将时间增量转换为 Series.dt.total_seconds :

df1['timeSpent'] = (df1.pop('max') - df1.pop('min')).dt.total_seconds()
df1 = df1.reset_index()
print (df1)
session_id timeSpent
0 sess1 0.000
1 sess2 1304.118
2 sess3 0.000

单行解决方案:

df1 = (df.groupby('session_id')['timestamp']
.agg([('timeSpent', lambda x: x.max() - x.min())])
.assign(timeSpent = lambda x: x['timeSpent'].dt.total_seconds())
.reset_index())
print (df1)
session_id timeSpent
0 sess1 0.000
1 sess2 1304.118
2 sess3 0.000

关于python - 计算用户的时间增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55434649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com