In [287]: data_day = data[data["day"]==0]
In [288]: data_day_cat1 = data_day[data_day["cat1"]=="A"]
In [289]: data_day_cat1_cat2 = data_day_cat1[data_day_cat1["cat2"]=="1"]
In [290]: data_day_cat1_cat2["value"].pow(2).mean()
Out[290]: np.float64(26500.0)
In [291]: data_day_cat1_cat2 = data_day_cat1[data_day_cat1["cat2"]=="2"]
In [292]: data_day_cat1_cat2["value"].pow(2).mean()
Out[292]: np.float64(1024.0)
То есть в первый день, когда cat1 равен A, мне нужна одна строка для всех вхождений cat2, где последний как «среднеквадратическая ошибка». В настоящее время я перебираю все комбинации, но экспериментировал с использованием groupby. Однако что-то вроде:
Самый простой способ — продемонстрировать мой вопрос на примере. Предположим, у меня есть следующий кадр данных длинного формата [code]In [284]: import pandas as pd
In [286]: data Out[286]: day cat1 cat2 value 0 0 A 1 10 1 0 A 1 230 2 0 A 2 32 3 0 B 1 12 4 0 B 2 12 5 0 B 2 65 6 1 A 1 12 7 1 A 2 34 8 1 B 1 97 9 1 B 1 0 10 1 B 2 12 11 1 B 2 1 [/code] В день у меня есть две категории. Моя цель — агрегировать категорию cat2 определенным образом. Для каждого кортежа ([code]date[/code], cat1, cat2) Я хотел бы выполнить следующее: [code]In [287]: data_day = data[data["day"]==0]
In [288]: data_day_cat1 = data_day[data_day["cat1"]=="A"]
In [289]: data_day_cat1_cat2 = data_day_cat1[data_day_cat1["cat2"]=="1"]
In [290]: data_day_cat1_cat2["value"].pow(2).mean() Out[290]: np.float64(26500.0)
In [291]: data_day_cat1_cat2 = data_day_cat1[data_day_cat1["cat2"]=="2"]
In [292]: data_day_cat1_cat2["value"].pow(2).mean() Out[292]: np.float64(1024.0) [/code] То есть в первый день, когда cat1 равен A, мне нужна одна строка для всех вхождений cat2, где последний как «среднеквадратическая ошибка». В настоящее время я перебираю все комбинации, но экспериментировал с использованием groupby. Однако что-то вроде: [code]data.groupby(["day", "cat1", "cat2"])["value"].apply(lambda x: x**2).mean() [/code] Работает. Я хотел бы получить DataFrame (только первые две строки) следующим образом: [code] day cat1 cat2 value 0 0 A 1 26500 1 0 A 2 1024 [/code] Возможно ли это без цикла по всему дню, cat1 и cat2? Можно ли использовать groupby?