ГлавнаяБлогErrors / FixesГруппировка пандасами по месяцам в диапазоне дат из DataFrame, начальная дата и конечная дата
Errors / Fixes5 сентября 2026 г.2 мин

Группировка пандасами по месяцам в диапазоне дат из DataFrame, начальная дата и конечная дата

Pandas Groupby Monthly: Отображение графика с учетом дат первого и последнего записей ## Введение В этом руководстве мы рассмотрим, как использовать функцию `groupby` из библиотеки Pandas для группировки данных...

Pandas Groupby Monthly: Отображение графика с учетом дат первого и последнего записей

Введение

В этом руководстве мы рассмотрим, как использовать функцию groupby из библиотеки Pandas для группировки данных по месяцам и отображения графика, начиная с даты первого и заканчивая датой последнего записей в DataFrame. Этот метод полезен при анализе временных рядов и других задачах, связанных с периодической группировкой данных.

Проблема

При использовании groupby с параметром freq='MS' (первый день каждого месяца), график начинает отображаться с месяца, где есть хотя бы одна запись, даже если это не первый день месяца в DataFrame. Это может привести к неполному отображению данных или искажению временных тенденций.

Решение

Для корректного отображения графика начиная с первой записи и заканчивая последней, можно использовать следующий подход:

Шаг 1: Группировка данных по месяцам и вычисление суммарных значений

import pandas as pd
import plotly.express as px

# Предполагаемый DataFrame df_output с колонками 'date', 'sales', 'region'
df_output = pd.DataFrame({
    'date': ['2018-02-06', '2018-03-09', '2018-04-15', '2018-05-21', '2018-06-01'],
    'sales': [100, 150, 200, 250, 300],
    'region': ['North', 'South', 'East', 'West', 'North']
})

# Преобразование столбца 'date' в формат datetime
df_output['date'] = pd.to_datetime(df_output['date'])

# Группировка данных по месяцам и регионам с суммированием продаж и максимумом даты
df_monthly = (df_output
              .groupby([pd.Grouper(key='date', freq='MS'), 'region'])
              .agg(sales=('sales', 'sum'),
                   last_date=('date', 'max'))
              .reset_index())

print(df_monthly)

Шаг 2: Создание графика с использованием Plotly Express

fig1 = px.line(df_monthly,
               x="last_date",  # ← Используем фактическую дату вместо начала месяца
               y="sales",
               color="region",
               markers=True,
               hover_data={"last_date": "%d %b %Y", "sales": ":,.0f"}
              )

# Настройка диапазона оси X
fig1.update_layout(xaxis=dict(range=['2018-02-06', '2022-02-14']))

fig1.show()

Практические советы

  1. Преобразуйте данные в формат datetime: Убедитесь, что столбец дат преобразован в формат datetime перед группировкой.
  2. Используйте pd.Grouper с параметром freq='MS': Для группировки данных по месяцам.
  3. Агрегируйте данные: Используйте методы агрегации для суммирования и получения максимальной даты.
  4. Настройка графика: Используйте Plotly для настройки графика и отображения фактических дат.

Заключение

Этот подход позволяет корректно отображать графики, начиная с первой записи и заканчивая последней, без пропусков или искажений. Этот метод особенно полезен для анализа временных рядов и других задач, требующих точного представления данных.

SEO_Теги

  • pandas
  • groupby
  • monthly
  • Plotly
  • графика -数据分析 -时间序列分析