You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python函数简化基于年份的pandas数据过滤与聚合流程?

简化年份过滤与聚合的重复流程

直接写个自定义函数把这套重复逻辑封装起来,以后传年份就能直接用:

def process_year_sales(df, year):
    # 过滤指定年份的month和sales列
    filtered_df = df[df['year'] == year][['month', 'sales']]
    # 按月份分组求平均,重命名列
    result_df = filtered_df.groupby('month').agg({'sales': 'mean'}).reset_index()
    result_df.rename(columns={'sales': f's{str(year)[2:]}'}, inplace=True)
    return result_df

调用的时候就简单多了,循环年份批量生成结果:

years = [2013, 2014, 2015, 2016, 2017]
# 把结果存在字典里,方便后续调用
year_dfs = {}
for y in years:
    year_dfs[f'df_{y}'] = process_year_sales(df_train1, y)

# 比如取2013年的结果就是 year_dfs['df_2013']

如果不想生成多个单独的DataFrame,更高效的做法是一次性处理所有年份,直接得到合并后的结果,不用后续再拼接:

# 按年份和月份分组求平均
agg_df = df_train1.groupby(['year', 'month'])['sales'].mean().reset_index()
# 把年份转成列名,得到类似你原来多个df合并后的格式
final_df = agg_df.pivot(index='month', columns='year', values='sales').reset_index()
# 重命名列,和之前的s13、s14格式统一
final_df.columns = ['month'] + [f's{str(y)[2:]}' for y in years]

这样一行就搞定所有年份的处理,比生成多个df再合并要高效得多。

内容的提问来源于stack exchange,提问作者Tan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:46:15