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

如何按Pandas DataFrame中items列的首个元素分组求和?

Pandas按列表首元素分组求和的正确实现

原始数据

import pandas as pd 

df = pd.DataFrame({'items':[[101,102],[102,101],[102,103],
                            [101,103],[101,101],[102,102],
                            [103,103]],
                   'value':[12,13,11,15,17,8,19]})
print(df)

需求说明

按df['items']每行列表的首个元素分组,对value列求和:

  • 首元素为101的行:value总和为12+15+17=44
  • 首元素为102的行:value总和为13+11+8=32
  • 首元素为103的行:value总和为19

错误代码分析

你写的df1 = df.groupby(df['items'][1]).agg({'value':sum})逻辑错误:df['items'][1]仅取了items列第二行的单个列表,并非提取每行列表的首元素作为分组依据,导致分组完全不符合需求。

正确解决方案

方案1:用lambda表达式直接提取首元素分组

在groupby中通过lambda函数直接获取每行列表的第一个元素:

df1 = df.groupby(lambda x: df['items'][x][0])['value'].sum().reset_index(name='total_value')
df1.rename(columns={'index': 'first_item'}, inplace=True)
print(df1)

方案2:新增首元素列后分组(可读性更强)

先给DataFrame新增一列存储每行列表的首元素,再按该列分组求和:

# 新增首元素列
df['first_item'] = df['items'].apply(lambda x: x[0])
# 分组求和
df1 = df.groupby('first_item')['value'].sum().reset_index(name='total_value')
print(df1)

方案3:利用Pandas列表列的str索引(高版本支持)

如果你的Pandas版本较新,可以直接用str[0]提取列表首元素:

df1 = df.groupby(df['items'].str[0])['value'].sum().reset_index(name='total_value')
df1.rename(columns={'items': 'first_item'}, inplace=True)
print(df1)

最终输出结果

三种方案都会得到如下结果:

first_item  total_value
0         101           44
1         102           32
2         103           19

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:30:31