如何用Python DataFrame按日期计算并生成月度汇总数据表
解决方案
下面是实现需求的完整代码,附带分步说明:
import pandas as pd # 原数据初始化 data = {'Date': ['01-01-2021', '02-01-2021', '03-01-2021', '01-02-2021', '02-02-2021', '03-02-2021'], 'product': ['Apple', 'Apple', 'Apple', 'Apple', 'Apple', 'Apple'], 'quantity': [1,2,3,4,5,6], 'numbers': [1,2,3,4,5,6]} df = pd.DataFrame(data) # 1. 转换日期格式,提取年、月 df['Date'] = pd.to_datetime(df['Date'], format='%d-%m-%Y') df['year'] = df['Date'].dt.year df['month'] = df['Date'].dt.month # 2. 将宽表转成需求的长表结构 melted_df = df.melt( id_vars=['year', 'month', 'product'], value_vars=['quantity', 'numbers'], var_name='measurement', value_name='value' ) # 3. 按年月、产品、指标分组汇总 final_df = melted_df.groupby( ['year', 'month', 'product', 'measurement'] )['value'].sum().reset_index() print(final_df)
分步解释
- 日期处理:把字符串格式的
Date转成pandas日期类型,指定format='%d-%m-%Y'匹配原数据的日-月-年格式,避免解析错误。接着用dt.year和dt.month提取年、月信息。 - 宽表转长表:用
melt函数把quantity和numbers两个指标列合并成measurement(指标名)和value(指标值),保留年、月、产品作为分组标识列。 - 分组汇总:按
year、month、product、measurement分组,对value求和(如果需要其他聚合逻辑,比如求均值,把sum()换成mean()即可),最后用reset_index()把分组索引转回普通列。
运行后输出结果:
year month product measurement value 0 2021 1 Apple quantity 6 1 2021 1 Apple numbers 6 2 2021 2 Apple quantity 15 3 2021 2 Apple numbers 15
如果需要月份显示为英文名称(如January),可以把提取月份的代码改成:
df['month'] = df['Date'].dt.month_name()
内容的提问来源于stack exchange,提问作者Abin Benny
相关产品推荐
相关产品推荐

