Серийные данные увеличивающиеся числа - PullRequest
0 голосов
/ 15 мая 2018

В Pandas Dataframe я ввожу уникальный ключ данных.

Например, входные данные:

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      

Я хочу Вывести dataFrame здесь.

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
...

Я хочуиспользуя диапазон и время получить ключевые значения, которые увеличиваются ..

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

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

flatnonzero и repeat

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
0 голосов
/ 15 мая 2018

Я думаю, вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...