看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
(编码题)给定某公司2023年的销售数据,要求使用 pd.Period() 进行月度销售周期分析。源数据如下:
import pandas as pd
import numpy as np
np.random.seed(42)
dates = pd.date_range('2023-01-01', '2023-12-31', freq='D')
sales = np.random.randint(1000, 5000, size=len(dates))
df = pd.DataFrame({'date': dates, 'daily_sales': sales})
print("原始数据前5行:")
print(df.head())
print(f"\n数据形状: {df.shape}")
输出结果:
原始数据前5行:
date daily_sales
0 2023-01-01 4095
1 2023-01-02 4973
2 2023-01-03 2681
3 2023-01-04 4753
4 2023-01-05 3532
数据形状: (365, 2)
具体要求:
代码如下:
import pandas as pd
import numpy as np
np.random.seed(42)
dates = pd.date_range('2023-01-01', '2023-12-31', freq='D')
sales = np.random.randint(1000, 5000, size=len(dates))
df = pd.DataFrame({'date': dates, 'daily_sales': sales})
# 转换和计算
df['month_period'] = df['date'].dt.to_period('M')
# 月度汇总
monthly_sales = df.groupby('month_period').agg(
total_sales=('daily_sales', 'sum'),
sales_days=('daily_sales', 'count')
).reset_index()
# 找出销售额最高和最低的月份
max_sales_month = (
monthly_sales
.loc[monthly_sales['total_sales']
.idxmax()]
)
min_sales_month = (
monthly_sales
.loc[monthly_sales['total_sales']
.idxmin()]
)
输出结果:
print("月度销售汇总:")
print(monthly_sales)
print(f"\n销售额最高的月份: {max_sales_month['month_period']} (销售额: {max_sales_month['total_sales']:,})")
print(f"销售额最低的月份: {min_sales_month['month_period']} (销售额: {min_sales_month['total_sales']:,})")
输出结果:
月度销售汇总:
month_period total_sales sales_days
0 2023-01 94531 31
1 2023-02 85131 28
2 2023-03 103044 31
3 2023-04 98739 30
4 2023-05 103148 31
5 2023-06 99217 30
6 2023-07 105992 31
7 2023-08 104559 31
8 2023-09 100804 30
9 2023-10 105699 31
10 2023-11 101673 30
11 2023-12 106812 31
销售额最高的月份: 2023-12 (销售额: 106,812)
销售额最低的月份: 2023-02 (销售额: 85,131)
参考代码的逻辑思路:
这种处理方式非常适合实际的业务数据分析场景,能够快速生成月度销售报告,识别销售趋势,为决策提供数据支持。pd.Period() 的使用让时间周期的处理变得简单而高效。
(完)
更新时间:2025-09-15 15:18:00 标签:pandas python 月度 周期分析