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

Pandas中分组求和并获取唯一值对的实现方法

解决方法:按ID分组求和并获取唯一值对

你之前用transform的方式确实会给每个id的所有记录重复对应总和值,想要得到唯一的id和sum_values配对其实很简单,这里有两种实用方法:

方法一:直接分组聚合(更高效)

这是最直接的思路,不需要给每条记录都添加总和,直接对id分组后计算dnm的总和,再筛选符合条件的记录:

import pandas as pd
import numpy as np

# 保留你原有的数据读取逻辑
data = pd.read_csv(file_name, sep='\t', header=0, parse_dates=[1], infer_datetime_format=True)

# 分组求和 + 重命名列 + 筛选
result = data.groupby('id')['dnm'].sum().reset_index(name='sum_values')
result = result[result['sum_values'] > 300]

逻辑说明:

  • groupby('id')['dnm'].sum():直接按id分组,计算每组dnm的总和,返回一个以id为索引的Series
  • reset_index(name='sum_values'):把索引转为普通列,并给总和列命名为sum_values
  • 最后一行筛选出sum_values大于300的记录,得到的就是唯一的id与对应总和的配对

方法二:基于你原代码修改(保留原有逻辑)

如果你想沿用之前用transform的思路,只需要在筛选后保留需要的列并去除重复行即可:

import pandas as pd
import numpy as np

data = pd.read_csv(file_name, sep='\t', header=0, parse_dates=[1], infer_datetime_format=True)

test = (data.assign(sum_values = data.groupby('id')['dnm'].transform(np.sum))
           .query('sum_values > 300')
           # 只保留需要的两列
           [['id', 'sum_values']]
           # 去除重复的id行
           .drop_duplicates())

两种方法最终都会得到你期望的输出:

id  sum_values
0  101122        574
1  221344       1050

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:29:40