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

Pandas:添加特定多列求和的总计行并保留数据类型

解决DataFrame添加特定列求和行的靠谱方案

我太懂你这种踩坑的感觉了!之前搜的那些方法要么碰到非数值列直接报错,要么好好的整数列被转成浮点数,还有的只能单独处理一列,确实闹心。针对你的需求——只对指定数值列求和,还要保留原数据类型、避开不需要求和的列(比如CountyID),我给你两个实用的解决方案,亲测有效!

方法一:用pd.concat构造总计行(推荐,不修改原数据)

这种方法先单独构建总计行的内容,再和原DataFrame合并,既能精准控制每一列的显示,还能完美保留原数据类型:

import pandas as pd

# 你的示例DataFrame
df1 = pd.DataFrame(
    data={
        'CountyID': [77, 95],
        'Acronym': ['LC', 'NC'],
        'Developable': [44490, 56261],
        'Protected': [40355, 35943],
        'Developed': [66806, 72211]
    },
    index=['Lehigh', 'Northampton']
)

# 1. 指定需要求和的目标列
sum_columns = ['Developable', 'Protected', 'Developed']

# 2. 构造总计行的数据:自定义非求和列,自动填充求和列的结果
total_row = pd.Series(
    {
        'CountyID': '',  # 非求和列可以设为空、'N/A'或者你想要的任意内容
        'Acronym': 'TOTAL',
        **df1[sum_columns].sum().to_dict()  # 展开求和结果到对应列
    },
    name='Total'  # 设置总计行的索引名称
)

# 3. 合并原DataFrame和总计行,保留原数据类型
df_with_total = pd.concat([df1, total_row.to_frame().T])

# 查看结果
print(df_with_total)

运行后输出的结果完全符合预期:

  • Developable/Protected/Developed列的总和是整数,没有被转成浮点数
  • CountyID列留空,Acronym列显示'TOTAL',清晰区分总计行
  • 原数据的索引和结构都保持完整

方法二:用df.loc直接赋值(更直观,适合快速操作)

如果你不想额外构建新的Series,也可以直接在原DataFrame的副本上添加总计行:

import pandas as pd

df1 = pd.DataFrame(
    data={
        'CountyID': [77, 95],
        'Acronym': ['LC', 'NC'],
        'Developable': [44490, 56261],
        'Protected': [40355, 35943],
        'Developed': [66806, 72211]
    },
    index=['Lehigh', 'Northampton']
)

# 先复制原DataFrame,避免修改原始数据
df_with_total = df1.copy()
sum_columns = ['Developable', 'Protected', 'Developed']

# 给非求和列设置自定义内容
df_with_total.loc['Total', 'Acronym'] = 'TOTAL'
df_with_total.loc['Total', 'CountyID'] = ''

# 对指定列求和并赋值,自动保留整数类型
df_with_total.loc['Total', sum_columns] = df1[sum_columns].sum()

print(df_with_total)

这个方法的优势是步骤更少,直接在副本上操作,适合临时快速处理数据。

为什么这两种方法能解决你的痛点?

  • 避开非数值列报错:我们明确指定了要求和的列,不会让sum()去处理CountyID或Acronym这类列
  • 保留原数据类型:整数列求和后仍然是整数,赋值或合并时不会强制转成浮点数
  • 支持多列同时求和:一次就能处理所有目标列,不用逐个列手动赋值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:31:30