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

pandas使用groupby多列分组求和触发TypeError错误如何解决?

报错原因及解决方法

报错根源排查

这个报错TypeError: list indices must be integers or slices, not str通常由两类问题导致:

  • 第一类是你当前操作的df1并不是pandas DataFrame类型,而是Python列表类型,列表不支持字符串作为索引取值,你可以先运行print(type(df1))验证类型。如果确实是列表,先将其转为DataFrame:
    import pandas as pd
    # 假设你的列表结构是符合表结构的二维列表/字典列表
    df1 = pd.DataFrame(df1)
    
  • 第二类是赋值逻辑错误:你在groupby中设置了as_index=False,返回的结果是包含分组键+求和值的完整DataFrame,而非单独的求和列,直接将整个DataFrame赋值给某一列时,若目标df2类型异常也会触发报错,同时原代码也没有实现你要求的「仅对Right、Thru、Left对应的value求和」的过滤逻辑。

正确实现代码

场景1:生成单独的汇总表

如果你需要得到按分组聚合后的结果表,直接用以下代码:

# 先过滤目标movement,再分组求和并重命名字段
df2 = df1[df1['movement'].isin(['Right', 'Thru', 'Left'])].groupby(
    ['id', 'approach', 'start_time'],
    as_index=False
)['value'].sum().rename(columns={'value': 'combinedValue'})

场景2:将汇总值映射回原表每行

如果你需要在原表的每一行都新增对应分组的求和值,用transform方法:

# transform返回和原数据长度一致的聚合结果,直接赋值到新列即可
df1['combinedValue'] = df1[df1['movement'].isin(['Right', 'Thru', 'Left'])].groupby(
    ['id', 'approach', 'start_time']
)['value'].transform('sum')
# 非目标movement的行默认会赋值为NaN,可按需填充为0
df1['combinedValue'] = df1['combinedValue'].fillna(0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:39:01