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

pandas.concat()插入行位置异常,如何按分组添加对应小计行?

Pandas分组小计行位置错误及命名优化解决方案

问题分析

你当前的代码通过concat合并原数据和分组小计后直接按ProductName2排序,会导致小计行与原分组数据混排(因为小计行的ProductName2初始值和分组名一致),所以出现位置颠倒的问题;同时统一命名为"Subtotal"也不符合个性化需求。

修复代码

import pandas as pd

# 示例原数据(可替换为你的实际DataFrame)
df = pd.DataFrame({
    'ProductName2': ['Clindamycin', 'Clindamycin', 'Isotretinoin Capsule', 'Isotretinoin Capsule'],
    'NDC11': ['123', '456', '789', '012'],
    'Scripts': [10, 20, 15, 25]
})

# 1. 给原数据添加排序标记,确保原始行在分组内优先排序
df['_sort_flag'] = 0

# 2. 生成分组小计数据,自定义命名并添加排序标记
subtotals = df.groupby('ProductName2', as_index=False)['Scripts'].sum()
subtotals['ProductName2'] = subtotals['ProductName2'] + ' Subtotal'
subtotals['_sort_flag'] = 1

# 3. 补全小计数据的其他列(保持与原DataFrame列一致)
for col in df.columns:
    if col not in subtotals.columns:
        subtotals[col] = pd.NA

# 4. 合并后按分组名+排序标记排序,确保小计行在分组下方
result = pd.concat([df, subtotals]).sort_values(by=['ProductName2', '_sort_flag'])

# 5. 移除临时排序列(可选)
result = result.drop(columns='_sort_flag')

print(result)

关键改进点

  • 排序标记_sort_flag:给原始数据设为0,小计行设为1,排序时同一分组内原始数据先展示,小计行紧随其后,彻底解决位置错误问题。
  • 自定义小计名称:直接在分组小计的ProductName2列拼接分组名和"Subtotal",实现"Clindamycin Subtotal"这类个性化命名。
  • 列一致性处理:补全小计数据的其他列为空值,避免合并后出现列缺失的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:07:18