如何用Pandas按日期(忽略时分秒)聚合相同日期行并求和
解决日期聚合问题的完整方案
刚接触Python遇到这类数据处理问题很正常,我帮你梳理下问题所在,再给出修正后的完整流程:
首先先指出你之前代码里的两个核心问题:
- 日期格式化代码有语法错误:
format='%b %d%Y.%f'`里的引号没闭合,导致这段代码根本跑不通; - 格式字符串和实际日期不匹配:你的日期是
2018-04-08 15:52:26.110这种YYYY-MM-DD HH:MM:SS.ms格式,但你用了%b(月份缩写,比如Apr),完全不匹配,自然无法正确解析。
下面是修正后的完整代码,每一步都给你标注清楚:
修正后的代码流程
import pandas as pd # 1. 读取原始Excel并处理目标列(不用反复存读Excel,直接内存操作) df = pd.read_excel(f"{var}.xlsx") # 选择第37列(索引36),注意用[36]而不是36,避免变成Series df = df.iloc[:, [36]] # 重命名列 df = df.rename(columns={'Prospect Dt. Cadastro': 'date'}) # 2. 正确解析日期并提取纯日期部分 # 你的日期是标准ISO格式,pd.to_datetime可以自动识别,不用指定format df['date'] = pd.to_datetime(df['date']) # 提取纯日期(转为字符串类型,方便后续分组) df['date'] = df['date'].dt.date # 如果你想保留datetime类型的日期(推荐做时间分析),可以用: # df['date'] = df['date'].dt.floor('D') # 3. 添加辅助列 df['value'] = 1 df['source'] = 'ANAPRO' # 4. 按日期+source分组,对value求和 aggregated_df = df.groupby(['date', 'source'], as_index=False)['value'].sum() # 5. 保存结果并验证 aggregated_df.to_excel('aggregated_payload.xlsx', index=False) # 读取验证 result = pd.read_excel('aggregated_payload.xlsx') print(result.head(10))
额外优化说明
- 去掉了冗余的Excel读写步骤:你之前把列存成新Excel再读回来完全没必要,直接在内存里处理效率更高;
- 分组逻辑更清晰:如果你的
source列全是ANAPRO,也可以只按date分组,之后再统一添加source列; - 日期处理更稳妥:用
dt.date提取纯日期,确保相同日期的行能被正确聚合。
内容的提问来源于stack exchange,提问作者Gabriel Fernandes
相关产品推荐
相关产品推荐

