熊猫数据框多索引和分组依据

时间:2020-03-23 20:07:37

标签: pandas pandas-groupby multi-index

给出以下数据框:

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具有重复值,而其他列具有随机数。

我要插入新索引 OR 新列,以使最终数据框如下所示:

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 个答案:

答案 0 :(得分:4)

IIUC,您可以这样做:

service.run()

输出:

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