Подмножество многоуровневых данных в пандах

Я успешно использую функцию 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.

Итак, для каждой записи X и каждой Y у вас есть список / массив, среднее значение которого вы хотите получить?

AER 26.10.2018 00:30
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
1
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме