如何按B列分组求和D列值且不重复计算同A列值的D值
解决方案
首先还原你提供的DataFrame:
import pandas as pd data = { 'A': ['foo', 'foo', 'foo', 'bar', 'bar', 'abc', 'abc'], 'B': ['a', 'a', 'b', 'b', 'a', 'c', 'a'], 'C': [1200, 700, 1000, 270, 350, 270, 350], 'D': [300, 300, 300, 70, 70, 300, 300] } df = pd.DataFrame(data)
你的核心需求是:按B列分组求和D,但同一A对应的同一B组合,D值只累加一次(同一A的D值固定,重复行属于冗余数据)。
实现步骤
- 去除
A和B的重复组合:同一(A,B)对应的D值完全一致,重复行无需保留 - 按
B分组,对D列求和
代码实现:
# 保留唯一的(A,B)组合 unique_df = df.drop_duplicates(subset=['A', 'B']) # 按B分组求和D sum_result = unique_df.groupby('B')['D'].sum() print(sum_result)
输出结果
B a 670 b 370 c 300 Name: D, dtype: int64
完全匹配你期望的计算逻辑:
a:300(foo) + 70(bar) + 300(abc) = 670b:300(foo) + 70(bar) = 370c:300(abc) = 300
也可以用一行代码简化实现:
sum_result = df.groupby(['A', 'B'])['D'].first().groupby('B').sum()
内容的提问来源于stack exchange,提问作者Luiz Scheuer
相关产品推荐
相关产品推荐

