假设这是我的示例数据:
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
答案 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)