Pandas фрейм данных многоиндексный и групповой - PullRequest
1 голос
/ 23 марта 2020

Учитывая следующий DataFrame:

import pandas as pd
d = {'RAOPeriodOrFrequency': [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3], 
     'RAOSurgeAmp': [28.57, 45.71, 83.49, 21.46 ,40.77, 101.26, 13.88,  31.26, 110.74, 0.01, 20.74, 100.54], 
     'RAOSwayAmp': [-4.10, -10.81   , 7.25, -2.07, 6.69, 33.90, -1.13, 26.29,   63.00, 15.39, 43.88, 85.54]}
df = pd.DataFrame(data=d)

df   
    RAOPeriodOrFrequency  RAOSurgeAmp  RAOSwayAmp
0                      1        28.57       -4.10
1                      2        45.71      -10.81
2                      3        83.49        7.25
3                      1        21.46       -2.07
4                      2        40.77        6.69
5                      3       101.26       33.90
6                      1        13.88       -1.13
7                      2        31.26       26.29
8                      3       110.74       63.00
9                      1         0.01       15.39
10                     2        20.74       43.88
11                     3       100.54       85.54

Единственное, что следует отметить, это то, что столбец 0 имеет повторяющиеся значения, в то время как другие столбцы имеют случайные числа.

Я хочу вставить новый индекс ИЛИ новый столбец, чтобы итоговый кадр данных выглядел так:

Out[5]: 
    Heading  RAOPeriodOrFrequency  RAOSurgeAmp  RAOSwayAmp
0         0                     1        28.57       -4.10
1         0                     2        45.71      -10.81
2         0                     3        83.49        7.25
3        15                     1        21.46       -2.07
4        15                     2        40.77        6.69
5        15                     3       101.26       33.90
6        30                     1        13.88       -1.13
7        30                     2        31.26       26.29
8        30                     3       110.74       63.00
9        45                     1         0.01       15.39
10       45                     2        20.74       43.88
11       45                     3       100.54       85.54

Значения для нового столбца содержатся в массиве в виде:

hd=np.array([0,15,30,45])

Любая помощь приветствуется.

Заранее спасибо!

1 Ответ

4 голосов
/ 23 марта 2020

IIU C, вы можете сделать:

df['Heading'] = hd[df.RAOPeriodOrFrequency.diff().lt(0).cumsum()]

Выход:

    RAOPeriodOrFrequency  RAOSurgeAmp  RAOSwayAmp  Heading
0                      1        28.57       -4.10        0
1                      2        45.71      -10.81        0
2                      3        83.49        7.25        0
3                      1        21.46       -2.07       15
4                      2        40.77        6.69       15
5                      3       101.26       33.90       15
6                      1        13.88       -1.13       30
7                      2        31.26       26.29       30
8                      3       110.74       63.00       30
9                      1         0.01       15.39       45
10                     2        20.74       43.88       45
11                     3       100.54       85.54       45
...