Python数据帧组标记

Python数据帧组标记,python,pandas,segment,labeling,Python,Pandas,Segment,Labeling,Pandas或其他python包中是否有任何工具可以方便地标记Pandas数据帧中不同行数的组?以下是更多细节: 我的dataFrame有一列datetime.datetime对象用作dataFrame索引。时间间隔不均匀,在给定的时间内,行数会有所不同 在该数据帧中,我需要创建一个列,该列对于跨越固定时间跨度(在我的示例中为12秒)的每一系列行具有不同的标签 例如,使用带有秒的示例 Time(s) | label 1 | 0 2 | 0 3

Pandas或其他python包中是否有任何工具可以方便地标记Pandas数据帧中不同行数的组?以下是更多细节:

我的dataFrame有一列datetime.datetime对象用作dataFrame索引。时间间隔不均匀,在给定的时间内,行数会有所不同

在该数据帧中,我需要创建一个列,该列对于跨越固定时间跨度(在我的示例中为12秒)的每一系列行具有不同的标签

例如,使用带有秒的示例

Time(s) | label
1           |   0
2           |   0
3           |   0
7           |   0
12         |   1
15         |   1
20         |   1
24          |   2 
Etc… 
我正在寻找一种替代方法作为蛮力循环。与此相关的算法有标记、分割和映射,但我不确定到底要寻找什么。我希望有一些东西能更有效地利用python、Pandas和/或Numpy,因为行数将达到1亿左右

谢谢演示:

样本DF:

In [32]: df = pd.DataFrame({'Time':pd.date_range('2017-01-01 00:00:01', freq='3S', periods=15)})

In [33]: df
Out[33]:
                  Time
0  2017-01-01 00:00:01
1  2017-01-01 00:00:04
2  2017-01-01 00:00:07
3  2017-01-01 00:00:10
4  2017-01-01 00:00:13
5  2017-01-01 00:00:16
6  2017-01-01 00:00:19
7  2017-01-01 00:00:22
8  2017-01-01 00:00:25
9  2017-01-01 00:00:28
10 2017-01-01 00:00:31
11 2017-01-01 00:00:34
12 2017-01-01 00:00:37
13 2017-01-01 00:00:40
14 2017-01-01 00:00:43
解决方案:

In [34]: df['label'] = df.groupby(pd.Grouper(key='Time', freq='12S')).ngroup()
结果:

In [35]: df
Out[35]:
                  Time  label
0  2017-01-01 00:00:01      0
1  2017-01-01 00:00:04      0
2  2017-01-01 00:00:07      0
3  2017-01-01 00:00:10      0
4  2017-01-01 00:00:13      1
5  2017-01-01 00:00:16      1
6  2017-01-01 00:00:19      1
7  2017-01-01 00:00:22      1
8  2017-01-01 00:00:25      2
9  2017-01-01 00:00:28      2
10 2017-01-01 00:00:31      2
11 2017-01-01 00:00:34      2
12 2017-01-01 00:00:37      3
13 2017-01-01 00:00:40      3
14 2017-01-01 00:00:43      3
IIUC,时间是一个整数,那么我想你需要的是floordiv

df['label'] = df['Time(s)'] // 12

freq选项不是假设每个12秒的块中有恒定数量的条目吗?您的示例满足了这一点,因为它是以给定的频率生成的,但正如我所描述的,在我的示例中,跨越12s的给定块不会跨越恒定数量的行,因为这些12s是随机采样的。在这种情况下也会这样吗?你知道如果“Time”列被设置为数据帧的索引,为什么它不起作用吗?在这种情况下,我有了pd.gropper(key='index',freq='12S')。这将导致:
TypeError:unhabable type:'DatetimeIndex'
@Wall-E,如果
Time
设置为索引,请使用:
df.groupby(pd.Grouper(freq='12S')).ngroup()