Pandas DataFrame按Code分组求和销量,保留Brand字段的实现方案
解决方案
错误原因
你遇到的报错是因为groupby('Brand', 'Code')写法错误——多列分组时必须用列表包裹列名,即groupby(['Brand', 'Code'])。另外,drop_duplicates()会直接丢弃重复行的销量数据,完全不符合求和需求,所以这个步骤没必要。
正确实现方式
根据你的需求,分两种场景处理:
场景1:同一Code对应的Brand唯一
如果相同Code的行Brand完全一致,直接按Brand+Code分组求和即可,Brand会被保留在结果中:
# 按Brand和Code分组,仅对数值列求和,保留原列结构 result = df_VxM.groupby(['Brand', 'Code'], sort=False, as_index=False).sum(numeric_only=True)
numeric_only=True用于避免对Brand这类非数值列尝试求和,让代码更严谨。
场景2:同一Code可能对应多个Brand
如果相同Code下有不同的Brand,需要保留Brand信息同时求和销量,可以用agg()指定每列的处理逻辑:
result = df_VxM.groupby('Code', sort=False, as_index=False).agg( Brand=('Brand', lambda x: ','.join(x.unique())), # 合并该Code下所有唯一Brand Sells1=('Sells1', 'sum'), Sells2=('Sells2', 'sum') )
如果只想保留每组第一个出现的Brand,把lambda x: ','.join(x.unique())换成'first'即可。
内容的提问来源于stack exchange,提问作者melgibsonuwu
相关产品推荐
相关产品推荐

