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

如何在Python Pandas中按指定列范围汇总DataFrame数值?

在Pandas中添加指定分段汇总行的实现方法

问题描述

现有如下Pandas DataFrame,各列数据类型:

  • MONTH_NR:数值型
  • MONTH_NAME:对象型
  • VALUE:数值型

原始数据:

MONTH_NRMONTH_NAMEVALUE
1JANUARY10
2FEBRYARY20
3MARCH15
4APRIL10
5MAY11
6JUN100
7JULY200
8AUGUST12
9SEPTEMBER20
10OCTOBER50
11NOVEMBER30
12DECEMBER50

需要添加3行汇总数据:

  1. 1-6月的VALUE列数值总和
  2. 7-12月的VALUE列数值总和
  3. 1-12月的VALUE列数值总和

期望输出结果:

MONTH_NR | MONTH_NAME  | VALUE
    ---------|-------------|---------
    1        | JANUARY     |  10
    2        | FEBRYARY    |  20
    3        | MARCH       |  15
    4        | APRIL       |  10
    5        | MAY         |  11
    6        | JUN         |  100
SUM_AFTER_1_6|             |  166
    7        | JULY        |  200
    8        | AUGUST      |  12
    9        | SEPTEMBER   |  20
    10       | OCTOBER     |  50
    11       | NOVEMBER    |  30
    12       | DECEMBER    |  50
SUM_AFTER_7_12|             |  362
SUM_ALL      |             |  528

解决方案

通过构造汇总行DataFrame,拆分原数据后按顺序拼接,即可实现需求:

import pandas as pd

# 构造原始DataFrame
data = {
    'MONTH_NR': [1,2,3,4,5,6,7,8,9,10,11,12],
    'MONTH_NAME': ['JANUARY','FEBRYARY','MARCH','APRIL','MAY','JUN','JULY','AUGUST','SEPTEMBER','OCTOBER','NOVEMBER','DECEMBER'],
    'VALUE': [10,20,15,10,11,100,200,12,20,50,30,50]
}
df = pd.DataFrame(data)

# 计算各分段总和
sum_1_6 = df[df['MONTH_NR'].between(1,6)]['VALUE'].sum()
sum_7_12 = df[df['MONTH_NR'].between(7,12)]['VALUE'].sum()
sum_all = df['VALUE'].sum()

# 构造各汇总行
sum_row_1_6 = pd.DataFrame({
    'MONTH_NR': ['SUM_AFTER_1_6'],
    'MONTH_NAME': [''],
    'VALUE': [sum_1_6]
})
sum_row_7_12 = pd.DataFrame({
    'MONTH_NR': ['SUM_AFTER_7_12'],
    'MONTH_NAME': [''],
    'VALUE': [sum_7_12]
})
sum_row_all = pd.DataFrame({
    'MONTH_NR': ['SUM_ALL'],
    'MONTH_NAME': [''],
    'VALUE': [sum_all]
})

# 拆分原数据并按顺序拼接
result_df = pd.concat([
    df.iloc[:6],
    sum_row_1_6,
    df.iloc[6:],
    sum_row_7_12,
    sum_row_all
], ignore_index=True)

# 格式化打印结果(可选)
print(result_df.to_string(index=False, col_space=[15,15,10]))

关键说明

  • 用iloc[:6]和iloc[6:]拆分原数据,确保汇总行插入到指定位置
  • 每个汇总行单独构造为DataFrame,方便通过pd.concat完成拼接
  • ignore_index=True重置拼接后的索引,避免索引重复问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:05:42