Панды сгруппированы различия с переменным лагом - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть фрейм данных pandas с тремя переменными. Первая - это группирующая переменная, вторая - внутри «группового» сценария, а третья - результат. Я хотел бы рассчитать внутригрупповую разницу между нулевым условием, нулевым сценарием и другими сценариями внутри группы. Количество сценариев варьируется между различными группами. Мои данные выглядят так:

ipdb> aDf FieldId Scenario TN_load 0 0 0 134.922952 1 0 1 111.787326 2 0 2 104.805951 3 1 0 17.743467 4 1 1 13.411849 5 1 2 13.944552 6 1 3 17.499152 7 1 4 17.640090 8 1 5 14.220673 9 1 6 14.912306 10 1 7 17.233862 11 1 8 13.313953 12 1 9 17.967438 13 1 10 14.051882 14 1 11 16.307317 15 1 12 12.506358 16 1 13 16.266233 17 1 14 12.913150 18 1 15 18.149811 19 1 16 12.337736 20 1 17 12.008868 21 1 18 13.434605 22 2 0 454.857959 23 2 1 414.372215 24 2 2 478.371387 25 2 3 385.973388 26 2 4 487.293966 27 2 5 481.280175 28 2 6 403.285123 29 3 0 30.718375 ... ... ... 29173 4997 3 53.193992 29174 4997 4 45.800968

Мне также придется писать функции, чтобы получать процентные различия и т. Д., Но это поставило меня в тупик. Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 02 ноября 2018

Вы можете получить разницу со сценарием 0 внутри групп, используя groupby и transform, например:

df['TN_load_0'] = df['TN_load'].groupby(df['FieldId']).transform(lambda x: x - x.iloc[0])

df

    FieldId Scenario    TN_load TN_load_0
0   0              0    134.922952  0.000000
1   0              1    111.787326  -23.135626
2   0              2    104.805951  -30.117001
3   1              0    17.743467   0.000000
4   1              1    13.411849   -4.331618
5   1              2    13.944552   -3.798915
6   1              3    17.499152   -0.244315
...