查找行数最多的时间间隔

Posted

技术标签:

【中文标题】查找行数最多的时间间隔【英文标题】:Find the time interval with the most rows 【发布时间】:2017-03-14 23:21:24 【问题描述】:

我有以下 DataFrame,其中每一行代表自行车租赁:

(持续时间以秒为单位)

我对熊猫和大数据非常陌生。我正在尝试找出当前使用的自行车数量最多的具体时间*,以及该最大值是多少

Timebeing Date 具有小时和分钟精度。 *

租用时间从 60 秒到 17270400 秒(199 天)不等

数据框共有 67.000 行。

我知道解决方案可能很简单,但我一直在思考和寻找一段时间,但我还是坚持了下来。

这是.csv的一些数据(为了数据的一点多样性,从文件的顶部、中间和末尾选择了一些记录)

http://pastebin.com/Tgnupe7K

编辑:使用 .csv 中的一些原始数据添加了 pastebin

【问题讨论】:

这是个好问题。但是,您做了一些不会帮助您获得好的答案的事情。阅读MCVE 以更好地了解如何提出问题。简而言之,让我们这些通过发布我们可以复制和粘贴的数据来回答问题的人更容易。数据图像不受欢迎,因为从图像重新创建数据很烦人。 【参考方案1】:

这里的想法是考虑每辆自行车进入和退出使用的时间,将进入使用表示为 +1,退出使用表示为 -1。取这些时间,对它们进行排序,然后对 +1/-1 进行累积和。累积和的最大值将给出给定时间的最大自行车数。

我将使用我模拟的一些数据作为示例:

# Setup some fake data.
np.random.seed([3, 1415])
n = 67
df = pd.DataFrame(
    'start_date': np.random.choice(pd.date_range('2016-01-01', periods=10), size=n),
    'duration': np.random.randint(1, 10**5, size=n)
)
df['start_date'] += pd.to_timedelta(np.random.randint(1000, size=n), unit='m')

那么程序如下:

# Combine the entrance and exit times with the appropriate sign.
bike_times = pd.concat([
    pd.Series(1, index=df['start_date']),
    pd.Series(-1, index=df['start_date'] + pd.to_timedelta(df['duration'], unit='s')),
])

# Sort the dates and take the cumulative sum of the signs.
bike_times = bike_times.sort_index().cumsum()

# Find the max time and number of bikes.
max_dt = bike_times.idxmax()
max_bikes = bike_times.max()

在上面的代码中,max_dt 将产生自行车最多的开始时间。要查找结束时间,只需查看bike_times 中的下一个索引值即可。

【讨论】:

以上是关于查找行数最多的时间间隔的主要内容,如果未能解决你的问题,请参考以下文章

计算分钟时间间隔之间的行数 - Python

如何在 PostgreSQL 中按时间间隔聚合行数?

贪心算法——间隔任务规划——python

PTA的C语言题

查找 pk 为 int(不是 bigint)的最大表

选择行数,按 PostgreSQL 中时间间隔的动态范围排序