【发布时间】:2015-01-08 14:09:39
【问题描述】:
我已经在谷歌上搜索了一段时间,但没有找到合适的解决方案。我有一个包含几百万行的时间序列,其结构相当奇怪:
VisitorID Time VisitDuration
1 01.01.2014 00:01 80 seconds
2 01.01.2014 00:03 37 seconds
我想知道在某个时刻有多少人在网站上。为此,我必须将这些数据转换成更大的数据:
Time VisitorsPresent
01.01.2014 00:01 1
01.01.2014 00:02 1
01.01.2014 00:03 2
...
但是做这样的事情似乎效率很低。我的代码是:
dates = {}
for index, row in data.iterrows():
for i in range(0,int(row["duration"])):
dates[index+pd.DateOffset(seconds=i)] = dates.get(index+pd.DateOffset(seconds=i), 1) + 1
然后我可以将它转换成一个系列并能够重新采样:
result = pd.Series(dates)
result.resample("5min",how="mean").plot()
你能给我指出一个正确的方向吗?
编辑---
嗨,HYRY,这是一个头()
uid join_time_UTC 持续时间 0 1 2014-03-07 16:58:01 2953 1 2 2014-03-07 17:13:14 1954 2 3 2014-03-07 17:47:38 223【问题讨论】:
-
您可以将数据转换为enter_time和exit_time,然后每秒钟计算这两次。两个计数的不同是第二个计数的变化。然后将
cumsum()用于不同的计数,您可以获得每秒钟的在线计数。如果你发布一些真实的数据,我可以给你看代码。
标签: python pandas time-series sampling