如何自动化实现按日期过滤Pandas DataFrame并按SKU分组求和?
自动处理2017年所有日期的SKU库存汇总方案
嘿,我明白你现在的需求了——手动处理单个日期太麻烦,想自动搞定2017年所有日期的SKU库存汇总对吧?这里有两个实用的方案,看你更需要哪种:
方案1:一步到位生成所有日期的汇总结果(推荐)
不需要逐个拆分日期,直接用groupby同时按日期和SKU分组求和,这是最高效的方式:
首先先还原你的原始DataFrame:
import pandas as pd data = { 'Date': ['1/1/2017', '1/1/2017', '1/1/2017', '1/1/2017', '2/1/2017', '2/1/2017', '2/1/2017', '2/1/2017', '2/1/2017'], 'SKU': ['X1', 'X2', 'X1', 'X2', 'X1', 'X2', 'X2', 'X1', 'X1'], 'Balance': [8, 45, 47, 16, 14, 67, 9, 66, 158] } df = pd.DataFrame(data)
然后执行汇总代码:
# 按日期+SKU分组,计算Balance的总和 all_days_summary = df.groupby(['Date', 'SKU'], as_index=False).agg({'Balance': 'sum'}) print(all_days_summary)
输出结果:
Date SKU Balance 0 1/1/2017 X1 55 1 1/1/2017 X2 61 2 2/1/2017 X1 238 3 2/1/2017 X2 76
这个结果直接包含了所有日期的SKU汇总,不需要再逐个处理。
方案2:生成每个日期单独的汇总DataFrame
如果你确实需要把每个日期的结果单独存成独立的DataFrame,可以用字典来存储(比单独命名变量更规范,避免变量名混乱):
# 获取所有唯一的2017年日期 unique_dates = df['Date'].unique() # 创建字典来存储每个日期的汇总结果 date_summary_dfs = {} for date in unique_dates: # 过滤当前日期的数据 daily_data = df[df['Date'] == date] # 按SKU分组求和(保留Date列也可以) daily_summary = daily_data.groupby(['SKU', 'Date'], as_index=False).agg({'Balance': 'sum'}) # 将结果存入字典,键为日期字符串 date_summary_dfs[date] = daily_summary # 调用某一天的结果,比如1/1/2017 print(date_summary_dfs['1/1/2017'])
输出1/1/2017的结果:
SKU Date Balance 0 X1 1/1/2017 55 1 X2 1/1/2017 61
这样你可以通过date_summary_dfs['日期字符串']快速访问任意日期的汇总DataFrame。
补充说明
因为你的Date列是字符串类型,直接用==过滤完全没问题;如果后续需要处理日期排序、筛选年份等操作,也可以把Date转换成datetime类型:
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
内容的提问来源于stack exchange,提问作者Ahamed Moosa
相关产品推荐
相关产品推荐

