Операции с кадром данных pandas между значениями определенных столбцов/строк

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

В моем примере ниже я хотел бы, чтобы для каждой записи новый столбец «Agg» был результатом столбца «Значения» для каждого типа (1, 2, 3), разделенного на «Значения» для Calc.

        Date        Values  Agg
2016-01-01  Type 1    17     1.7
            Type 2    23     2.3
            Type 3    11     1.1
            Calc      10     1.0
2016-01-02  Type 1    25     0.25
            Type 2    39     0.39
            Type 3    34     0.34
            Calc      100    1.00
2016-01-03  Type 1    20     1.00
            Type 2    9      0.45
            Type 2    12     0.60
            Calc      20     1.00

В моем фактическом коде у меня есть группа «Дата» и другие индексы: эти изменения зависят от результатов запроса к базе данных.

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


person John_Mtl    schedule 11.04.2016    source источник
comment
Извините, вы после df['Agg'] = df['Values'].div(df['Values'].iloc[-1])?   -  person EdChum    schedule 11.04.2016
comment
Здравствуйте Эд, спасибо за ваш ответ. В моем коде у меня есть несколько дат и значение строки Calc для каждой. Мне нужно найти способ указать, что мне нужно конкретное значение для деления на заданную дату в индексе.   -  person John_Mtl    schedule 11.04.2016
comment
Можете ли вы конкретизировать свой вопрос, чтобы объяснить лучше   -  person EdChum    schedule 11.04.2016
comment
Я отредактировал код в начальном сообщении. Фрейм данных огромен с большим количеством дат; чего я хочу добиться, так это иметь возможность, независимо от размера фрейма данных, всегда вычислять Type n/Calc для поля значения и для каждой даты. Спасибо за вашу помощь!   -  person John_Mtl    schedule 11.04.2016


Ответы (1)


Код ниже работает. Я потратил слишком много времени на его написание, так что я должен остановиться на этом. Дайте мне знать, если вам нужны объяснения!

def func(df1):
    idx = df1.index.get_level_values(0)[0]
    df1 = df1.loc[idx]
    return (df1['Values'] / df1.loc['Calc']['Values']).to_frame()

df.groupby(level=0).apply(func)
person IanS    schedule 11.04.2016
comment
В некоторых случаях это работало отлично, но в итоге я изолировал значение и добавил extra_column для своего кода, чтобы избежать некоторых ошибок обработки данных. Спасибо! - person John_Mtl; 13.04.2016