将 pandas 数据透视数据框日期列分组为月份和年份

问题描述 投票:0回答:1

我有一个 pandas 数据透视数据框。下面是数据框。

这是我的代码:

pivot = df.query('brand_name == "ishin"').pivot_table(index = "channel_name",
                                                columns = "order_date",
                                                values = "qty",
                                                aggfunc = "sum",
                                                fill_value= 0,
                                                margins = False)

下图是数据帧的输出:

我想将日期输出分组为月份和年份。示例:所有 4 月份的产出将分组为 2023 年 4 月。除当月输出外的所有输出都应进行分组。我怎样才能做到这一点?任何帮助将不胜感激。

我尝试过使用 groupby 但如何排除当前月份?

python pandas dataframe pivot-table data-analysis
1个回答
0
投票

您可以简单地创建一个

Year-month
列并完全按照您所做的操作:

import pandas as pd
import numpy as np
from datetime import datetime

import pandas as pd
from datetime import datetime

data = {
    'brand_name': ['ishin', 'ishin', 'ishin', 'other', 'ishin', 'ishin'],
    'channel_name': ['online', 'offline', 'online', 'online', 'offline', 'offline'],
    'order_date': pd.to_datetime(['2023-04-01', '2023-04-15', '2023-05-02', '2023-05-10', '2023-06-25', '2023-06-26']),
    'qty': [10, 20, 30, 40, 50, 60]
}

df = pd.DataFrame(data)
df['order_date'] = pd.to_datetime(df['order_date'])
df['year_month'] = df['order_date'].dt.to_period('M')
current_year_month = pd.to_datetime('now').to_period('M')
filtered_df = df.query('brand_name == "ishin" & year_month != @current_year_month')

pivot = filtered_df.pivot_table(index="channel_name",
                                 columns="year_month",
                                 values="qty",
                                 aggfunc="sum",
                                 fill_value=0)

pivot.columns = pivot.columns.astype(str)

pivot

这给了你

year_month    2023-04  2023-05  2023-06
channel_name                           
offline            20        0      110
online             10       30        0
© www.soinside.com 2019 - 2024. All rights reserved.