如何将行分为10分钟间隔?

时间:2019-08-01 08:19:49

标签: python python-3.x pandas

假设这是我的示例数据:

         ID     datetime           
0         2  2015-01-09 19:05:39   
1         1  2015-01-10 20:33:38   
2         1  2015-01-10 20:33:38   
3         1  2015-01-10 20:45:39   
4         1  2015-01-10 20:46:39     
5         1  2015-01-10 20:46:59   
6         1  2015-01-10 20:50:39   

我想创建一个新列“ BIN”,告诉我们该行属于哪个10分钟bin。

i.e)选择最小日期时间并从那里开始。在此示例中,数据第一行是最短时间,但我的真实数据并非如此。我的真实数据未排序。

         ID     datetime           bin 
0         2  2015-01-09 19:05:39   1
1         1  2015-01-10 20:33:38   2
2         1  2015-01-10 20:33:38   2
3         1  2015-01-10 20:45:39   3
4         1  2015-01-10 20:46:39   3  
5         1  2015-01-10 20:46:59   3
6         1  2015-01-10 20:50:39   3

2 个答案:

答案 0 :(得分:4)

首先为时间增量减去datetime的最小值,然后由Series.dt.floor创建10minutes值,然后由Series.rank创建,最后由Series.astype转换为整数:< / p>

df['datetime'] = pd.to_datetime(df['datetime'])

df['bin'] = (df['datetime'].sub(df['datetime'].min())
                           .dt.floor('10Min')
                           .rank(method='dense')
                           .astype(int))
print (df)
   ID            datetime  bin
0   2 2015-01-09 19:05:39    1
1   1 2015-01-10 20:33:38    2
2   1 2015-01-10 20:33:38    2
3   1 2015-01-10 20:45:39    3
4   1 2015-01-10 20:46:39    3
5   1 2015-01-10 20:46:59    3
6   1 2015-01-10 20:50:39    3

答案 1 :(得分:1)

如果您将数据框称为df。假设您所指的垃圾箱的范围是1 - 6,其中1在0 - 10分钟之间,而6在50 - 60之间,那么您可以使用以下公式:

import math

df['datetime'] = pd.to_datetime(df['datetime'])
df['bin'] = math.ceil(df['datetime'].minute / 10)
相关问题