Pandas GroupBy分组求和后如何新增分组最小ID且不破坏原有聚合结果
解决方案
你可以直接使用groupby.agg方法为不同列指定不同的聚合规则,无需修改原有分组键,也不会影响Cantidad的求和结果,代码如下:
# 原有生成Concat列的逻辑保留,建议增加类型转换避免数值相加出错 df['Concat'] = df['Doc'].astype(str) + df['Doc2'].astype(str) + df['Fecha'].str[:-9].str.replace('-','') # 一次分组完成两个聚合逻辑:Cantidad求和,ID取最小值 gb = df.groupby(['Concat', 'Fecha', 'Nombre', 'Doc', 'Doc2', 'Prod'], as_index=False).agg( Cantidad = ('Cantidad', 'sum'), ID = ('ID', 'min') ) # 调整列顺序和你期望的输出一致 gb = gb[['Concat', 'Fecha', 'ID', 'Nombre', 'Doc', 'Doc2', 'Prod', 'Cantidad']]
如果已经提前生成了不带ID的聚合结果,也可以通过映射的方式补充ID列:
# 从原表计算每个Concat分组对应的最小ID min_id_mapping = df.groupby('Concat')['ID'].min().to_dict() # 给现有聚合表匹配ID gb['ID'] = gb['Concat'].map(min_id_mapping) # 调整列顺序即可 gb = gb[['Concat', 'Fecha', 'ID', 'Nombre', 'Doc', 'Doc2', 'Prod', 'Cantidad']]
内容的提问来源于stack exchange,提问作者Luis Desde Canada
相关产品推荐
相关产品推荐

