Pandas Фреймы данных отлично подходят для хранения неоднородных типов данных, а метод groupby добавляет большую гибкость для агрегирования данных; однако я часто хотел бы сохранить базовые данные, которые не могут быть агрегированы после выполнения операции группировки.
Пример :
Давайте поработаем со следующим фреймом данных:
df_cars = pd.DataFrame({
'brand': ['Porsche', 'Porsche', 'Porsche', 'BMW' ,'BMW' ,'BMW'],
'model': ['911 GT3', '911', '911', 'M3', 'M3', 'M3', ],
'speed(mph)': [100, 120, 110, 70, 80, 90]})
Если бы я запускал следующий код:
df_cars.groupby('brand').mean()
Я бы получил среднюю скорость (миль в час) для каждого бренда; однако я бы потерял базовые данные из столбцов модели и бренда.
Чтобы сохранить эту информацию и выполнить те же вычисления среднего значения, мне нужно было бы вместо этого выполнить следующий код:
df_cars.groupby('brand').agg({
'speed(mph)':'mean',
'model': lambda x: x.iloc[0] if x.nunique() == 1 else list(x),
'brand': lambda x: x.iloc[0] if x.nunique() == 1 else list(x)
})
Возвращает информационный кадр со средним значением, рассчитанным для каждого бренда. на основе и сохраняет базовые данные (теперь свернутые) в результирующем фрейме данных.
Является ли это наиболее эффективным способом сохранения этой информации? Кроме того, почему это не вариант в стандартной реализации groupby для более простого хранения данных, которые не могут быть агрегированы?