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

如何将DataFrame中各Model的Sum总计置于中间并添加对应最大Box值

实现方案

核心思路

先计算每个model的sum总计值与最大box数值,再定位每个model的中间行进行值替换,全程用Pandas分组操作保证处理效率。

完整代码

import pandas as pd

# 初始化原始数据
df = pd.DataFrame({
    'model': ['A','A','A','A','A','A','B','B','B','B'],
    'lot': ['aa','ab','ac','ad','ae','af','ba','bb','bc','bd'],
    'box': [1,1,2,2,2,3,1,2,2,2],
    'qty': [0.2,0.1,0.4,0.5,0.1,0.2,0.6,0.3,0.2,0.4],
    'sum': [0.3,"",1.0,"","",0.2,0.6,0.9,"",""]
})

# 1. 处理sum列:空字符串转NaN,方便数值计算
df['sum'] = pd.to_numeric(df['sum'], errors='coerce')

# 2. 按model分组计算关键指标:sum总计、最大box
model_metrics = df.groupby('model').agg(
    total_sum=('sum', 'sum'),
    max_box=('box', 'max')
).assign(max_box=lambda x: x['max_box'].astype(str))  # 转字符串匹配lot列类型

# 3. 分组处理每个model的中间行
def update_mid_row(group):
    row_count = len(group)
    mid_pos = row_count // 2  # 取组内中间行的位置
    # 替换中间行的lot和sum
    group.iloc[mid_pos, group.columns.get_loc('lot')] = model_metrics.loc[group.name, 'max_box']
    group.iloc[mid_pos, group.columns.get_loc('sum')] = model_metrics.loc[group.name, 'total_sum']
    return group

# 应用分组处理并得到结果
final_df = df.groupby('model', group_keys=False).apply(update_mid_row)

# 可选:将sum列的NaN转回空字符串,还原原始格式
final_df['sum'] = final_df['sum'].fillna('').astype(str)

print(final_df)

关键步骤说明

  • 预处理sum列是为了避免空字符串干扰数值求和,后续可按需转回原格式
  • 用groupby.agg一次性计算两个指标,比多次分组操作更高效
  • 通过组内索引定位中间行,确保每个model的修改位置精准匹配需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:44:55