python - 如何计算具有相同值的列的不同部分的时间差
问题描述
我想计算相同 URL 的每个会话的时间差,我不知道该怎么做。
我的数据框看起来像这样:
df = pd.DataFrame({'LogTime': ['2018-12-12 11:18:37.782000+00:00 ', '2018-12-12 11:20:35.782000+00:00', '2018-12-12 11:21:39.782000+00:00','2018-12-12 11:22:39.782000+00:00', '2018-12-12 11:22:40.782000+00:00', '2018-12-12 11:23:40.782000+00:00'],
'Session': ['a','a','b','c','c','c'],
'URL': ['/','/','/page','/new','/new','/']
})
它应该计算同一部分中相同 URL 之间的时间差。如果 Url 只出现一次,则时间差将设置为 1 分钟。
预期的输出是: time = pd.DataFrame({'Session': ['a','b','c','c'], 'URL': ['/','/page','/ new', '/'] '持续时间': ['time1','time2', 'time3','time4']})
解决方案
相当笨重但是:
df = pd.DataFrame({'LogTime': ['2018-12-12 11:18:37.782000+00:00 ', '2018-12-12 11:20:35.782000+00:00', '2018-12-12 11:21:39.782000+00:00','2018-12-12 11:22:39.782000+00:00', '2018-12-12 11:22:40.782000+00:00', '2018-12-12 11:23:40.782000+00:00'],
'Session': ['a','a','b','c','c','c'],
'URL': ['/','/','/page','/new','/new','/']
})
df['LogTime'] = pd.to_datetime(df['LogTime'])
times = []
ur = []
for n, g in df.groupby('URL'):
if len(g) == 1:
times.append(pd.Timedelta(minutes = 1))
ur.append(n)
else:
times.append(g.LogTime.max() - g.LogTime.min())
ur.append(n)
df = df.merge(pd.DataFrame({'TimeDiff':times, 'URL':ur}), on='URL')
df
它基本上将相同的 URL 组合在一起,然后在每组的 LogTime 列中添加最小和最大时间之间的差异,除非只有一个条目,循环将返回 1 分钟。
然后它在原始df上合并。
推荐阅读
- c - 将crs格式的稀疏矩阵自身相乘得到乘积
- linux - Git #hashtags 状态
- doctrine-orm - Symfony 5.2 - 缺少 @ORM\Entity(repositoryClass="App\Repository\EntityNameRepository")
- joomla - Joomla 管理员文章编辑表单重置标签
- javascript - 为什么我会收到错误“Uncaught (in promise) DOMException: play() failed 因为用户没有先与文档交互”?
- php - 试图访问 php 中 bool 类型值的数组偏移量
- c# - 如何在 Blazor Signalr 的多个窗口中刷新同一登录用户的数据
- apache-spark - 覆盆子上的 spark-shell,4 次尝试中的 1 次尝试从另一个开始我收到各种错误消息
- java - 将spring boot war文件部署到外部tomcat
- r - 我怎样才能得到一系列数字作为我的答案,*不仅是最后一个数字