Подмножество мультииерархических данных в пандах - PullRequest
0 голосов
/ 26 октября 2018

Я успешно использую функцию groupby () для вычисления статистики по сгруппированным данным, однако теперь я хотел бы сделать то же самое для подмножеств каждой группы.

Кажется, я не понимаю, как создать подмножество для каждой группы (как объект groupby), которое затем может быть применено к функции groupby, такой как mean ().Следующая строка работает так, как задумано:

d.groupby(['X','Y'])['Value'].mean()

Как можно установить значения отдельных групп, чтобы затем передать их в функцию среднего значения?Я подозреваю, что transform () или filter () могут быть полезны, хотя я не могу понять, как.

РЕДАКТИРОВАТЬ, чтобы добавить воспроизводимый пример:

random.seed(881)
value = np.random.randn(15)
letter = np.random.choice(['a','b','c'],15)
date = np.repeat(pd.date_range(start = '1/1/2001', periods=3), 5)
data = {'date':date,'letter':letter,'value':value}
df = pd.DataFrame(data)
df.groupby(['date','letter'])['value'].mean()

 date        letter
2001-01-01  a        -0.039407
            b        -0.350787
            c         1.221200
2001-01-02  a        -0.688744
            b         0.346961
            c        -0.702222
2001-01-03  a         1.320947
            b        -0.915636
            c        -0.419655
Name: value, dtype: float64

Вот пример вычисления среднего значениямногоуровневая группа.Теперь я хотел бы найти среднее значение подмножества каждой группы .Например, среднее значение данных каждой группы составляет <10-й процентиль групп.Ключ сводится к тому, что подмножества должны выполняться для групп, а не для всего df в первую очередь. </p>

1 Ответ

0 голосов
/ 26 октября 2018

Я думаю, что вам нужна функция quantile(), которую вы можете добавить в оператор groupby().apply().Для десятого процентиля используйте quantile(.1):

df.groupby(['date','letter'])['value'].apply(lambda g: g[g <= g.quantile(.1)].mean())
...