序列数据增加数字



在熊猫数据帧中,我输入数据唯一键。

例如 输入:

time                                  range                   
2018-03-04 00:00:06.520                 0                     
2018-03-04 00:00:07.130                 0                      
2018-03-04 00:00:07.850                 1                      
2018-03-04 00:00:08.420                 1                      
2018-03-04 00:00:09.210                 2                      
2018-03-04 00:00:10.070                 2                      
2018-03-04 00:00:10.840                 3                      
2018-03-04 00:00:11.230                 3                      
2018-03-04 00:00:11.980                 4                      
2018-03-04 00:00:12.560                 4                      
2018-03-04 00:00:13.120                 0                      
2018-03-04 00:00:13.790                 0                      
2018-03-04 00:00:14.330                 1                      
2018-03-04 00:00:15.280                 1                      
2018-03-04 00:00:15.960                 2                      
2018-03-04 00:00:16.420                 2                      
2018-03-04 00:00:17.090                 3      

我想输出数据帧在这里。

time                                  range                   Key
2018-03-04 00:00:06.520                 0                      1
2018-03-04 00:00:07.130                 0                      1
2018-03-04 00:00:07.850                 1                      1
2018-03-04 00:00:08.420                 1                      1
2018-03-04 00:00:09.210                 2                      1
2018-03-04 00:00:10.070                 2                      1
2018-03-04 00:00:10.840                 3                      1
2018-03-04 00:00:11.230                 3                      1
2018-03-04 00:00:11.980                 4                      1
2018-03-04 00:00:12.560                 4                      1
2018-03-04 00:00:13.120                 0                      2
2018-03-04 00:00:13.790                 0                      2
2018-03-04 00:00:14.330                 1                      2
2018-03-04 00:00:15.280                 1                      2
2018-03-04 00:00:15.960                 2                      2
2018-03-04 00:00:16.420                 2                      2
2018-03-04 00:00:17.090                 3                      2
...

我想使用范围和时间获取增加的键值。

我该怎么做?

我认为您可以使用lt()(小于(,shift()cumsum()。在一起,您可以在每次列range停止增加时(range值小于前一个range值时(累积计数。

df['Key'] = df['range'].lt(df['range'].shift()).cumsum() + 1
>>> df
time  range  Key
0   2018-03-04 00:00:06.520      0    1
1   2018-03-04 00:00:07.130      0    1
2   2018-03-04 00:00:07.850      1    1
3   2018-03-04 00:00:08.420      1    1
4   2018-03-04 00:00:09.210      2    1
5   2018-03-04 00:00:10.070      2    1
6   2018-03-04 00:00:10.840      3    1
7   2018-03-04 00:00:11.230      3    1
8   2018-03-04 00:00:11.980      4    1
9   2018-03-04 00:00:12.560      4    1
10  2018-03-04 00:00:13.120      0    2
11  2018-03-04 00:00:13.790      0    2
12  2018-03-04 00:00:14.330      1    2
13  2018-03-04 00:00:15.280      1    2
14  2018-03-04 00:00:15.960      2    2
15  2018-03-04 00:00:16.420      2    2
16  2018-03-04 00:00:17.090      3    2

diff

df.assign(Key=df.range.diff().lt(0).cumsum().add(1))
time  range  Key
0  2018-03-04 00:00:06.520      0    1
1  2018-03-04 00:00:07.130      0    1
2  2018-03-04 00:00:07.850      1    1
3  2018-03-04 00:00:08.420      1    1
4  2018-03-04 00:00:09.210      2    1
5  2018-03-04 00:00:10.070      2    1
6  2018-03-04 00:00:10.840      3    1
7  2018-03-04 00:00:11.230      3    1
8  2018-03-04 00:00:11.980      4    1
9  2018-03-04 00:00:12.560      4    1
10 2018-03-04 00:00:13.120      0    2
11 2018-03-04 00:00:13.790      0    2
12 2018-03-04 00:00:14.330      1    2
13 2018-03-04 00:00:15.280      1    2
14 2018-03-04 00:00:15.960      2    2
15 2018-03-04 00:00:16.420      2    2
16 2018-03-04 00:00:17.090      3    2

flatnonzerorepeat

a = np.diff(np.flatnonzero(np.concatenate(
[[True], np.diff(df.range.values) < 0, [True]]
)))
df.assign(Key=np.arange(a.size).repeat(a) + 1)
time  range  Key
0  2018-03-04 00:00:06.520      0    1
1  2018-03-04 00:00:07.130      0    1
2  2018-03-04 00:00:07.850      1    1
3  2018-03-04 00:00:08.420      1    1
4  2018-03-04 00:00:09.210      2    1
5  2018-03-04 00:00:10.070      2    1
6  2018-03-04 00:00:10.840      3    1
7  2018-03-04 00:00:11.230      3    1
8  2018-03-04 00:00:11.980      4    1
9  2018-03-04 00:00:12.560      4    1
10 2018-03-04 00:00:13.120      0    2
11 2018-03-04 00:00:13.790      0    2
12 2018-03-04 00:00:14.330      1    2
13 2018-03-04 00:00:15.280      1    2
14 2018-03-04 00:00:15.960      2    2
15 2018-03-04 00:00:16.420      2    2
16 2018-03-04 00:00:17.090      3    2

最新更新