Python时间序列按年季度分组聚合报TypeError错误的解决方法
修复Pandas按年季度分组时的TypeError错误
你遇到的这个TypeError其实是两个小细节问题导致的,我帮你拆解并修正:
问题1:分组键的传递方式错误
你直接把df['Date'].dt.year和df['Date'].dt.quarter作为两个独立参数传给groupby,但Pandas的groupby要求多个分组键必须放在列表里。如果分开传,第二个参数会被误识别为axis参数(这个参数只能是0或1),Pandas尝试处理时就会触发"str和int无法拼接"的类型错误。
问题2:聚合函数未明确指定
你的agg({'AmountInUSD'})写法不符合要求,agg方法需要明确你对目标列要执行什么聚合操作(比如求和、平均值、计数等),只写列名无法让Pandas知道你想做什么。
修正后的基础代码
这里以对AmountInUSD求和为例,你可以根据需求换成'mean'、'count'等聚合函数:
import pandas as pd # 先确保Date列是datetime类型(如果还没转换的话) df['Date'] = pd.to_datetime(df['Date']) # 正确的分组聚合写法 ts_quarter = df.groupby([df['Date'].dt.year, df['Date'].dt.quarter]).agg({'AmountInUSD': 'sum'})['AmountInUSD']
优化写法(更易读)
如果想让分组后的结果索引更清晰,可以给年份和季度的分组键重命名:
ts_quarter = df.groupby( [df['Date'].dt.year.rename('Year'), df['Date'].dt.quarter.rename('Quarter')] ).agg(AmountTotal=('AmountInUSD', 'sum'))
这样结果的行索引会显示Year和Quarter,列名是AmountTotal,后续处理起来更直观。
内容的提问来源于stack exchange,提问作者Kedar17
相关产品推荐
相关产品推荐

