групповая трансформация со стандартным отклонением - PullRequest
0 голосов
/ 04 февраля 2020

(python версия 3.7.3) У меня есть фрейм данных с 3 столбцами: region, channel & year_contacts. Ниже приведены некоторые фиктивные данные, по которым я хочу сгруппировать данные по регионам и каналам и рассчитать стандартное отклонение. Я мог бы сделать это, создав новый фрейм данных (groupby & apply), а затем объединив его с оригинальным, но я прочитал, что использование groupby & transform - более быстрый и чистый способ. К сожалению, числа от groupby / apply и groupby / transform отличаются (применяются правильно, преобразование неправильно). Кто-нибудь может указать, что не так с моим синтаксисом преобразования?

    import pandas as pd
    import numpy as np

    contacts = pd.DataFrame({
         'region':['rg1', 'rg1', 'rg1', 'rg1', 'rg1', 'rg1', 'rg2', 'rg2', 'rg2']
         ,'channel': ['ch1', 'ch1', 'ch1', 'ch1', 'ch1', 'ch1', 'ch1', 'ch1', 'ch1']
         , 'yearly_contacts' : [8, 16, 16, 50, 50, 4, 15, 20, 5]
         })

    # These are the numbers I expect:
    expected_stdev = contacts.groupby(['region', 'channel'])'yearly_contacts'].apply(np.std).reset_index()

    # But I want them directly added as 4th column
    contacts['actual_stdev'] = contacts.groupby(['region', 'channel'])["yearly_contacts"].transform(np.std)
    # It works, but why are the numbers different?
...