我有一个 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 但如何排除当前月份?
您可以简单地创建一个
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
在调整日期之前重新格式化日期:
(df
.assign(order_date=lambda d: pd.to_datetime(d['order_date']).dt.strftime('%B %Y'))
.pivot_table(index='channel_name',
columns='order_date',
values='qty',
aggfunc='sum',
fill_value=0,
margins=False)
)