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

如何在Pandas DataFrame末尾添加固定于底部的GRAND TOTAL行?

解决Pandas DataFrame中'GRAND TOTAL'行始终位于底部的问题

以下几种方法可以确保总计行在排序后仍保持在DataFrame末尾:

方法一:先排序原数据,再添加总计行

这是最直观的方案,先对原始数据完成排序,再将总计行追加到末尾,自然不会被排序影响:

# 先对原DataFrame按索引排序
new_df_sorted = new_df.sort_index()

# 计算并构造总计行
total = new_df.sum(numeric_only=True)
total.name = 'GRAND TOTAL'
total_df = total.to_frame().T
total_df.at['GRAND TOTAL', 'CURRENCY'] = ''
total_df.at['GRAND TOTAL', 'MANDATE'] = 'SomeValue'
total_df.at['GRAND TOTAL', 'COMPOSITE'] = 'GRAND TOTAL'

# 将排序后的原数据与总计行拼接,总计行自动位于底部
new_df_final = pd.concat([new_df_sorted, total_df.set_index('COMPOSITE')])

方法二:分离总计行后排序主数据

如果已经将总计行加入了DataFrame,可以先将其分离出来,排序剩余数据后再重新拼接:

# 分离总计行和主数据
grand_total = new_df[new_df.index == 'GRAND TOTAL']
main_data = new_df[new_df.index != 'GRAND TOTAL']

# 排序主数据
main_data_sorted = main_data.sort_index()

# 重新拼接,确保总计行在最后
new_df_final = pd.concat([main_data_sorted, grand_total])

方法三:自定义排序规则强制总计行在末尾

通过自定义排序键,让'GRAND TOTAL'的排序优先级低于所有其他索引值,从而在排序时自动落在最后:

# 先完成总计行的拼接
new_df = pd.concat([new_df, total_df.set_index('COMPOSITE')])

# 自定义排序:非总计行按索引正常排序,总计行强制放在最后
new_df_sorted = new_df.loc[sorted(new_df.index, key=lambda x: (x == 'GRAND TOTAL', x))]

原理说明

排序键lambda x: (x == 'GRAND TOTAL', x)会将非总计行的键设为(False, 索引值),总计行的键设为(True, 索引值)。由于False(对应0)小于True(对应1),所有非总计行会先按索引排序,总计行则自动排在最后。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:52:36