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

Pandas DataFrame按条件汇总票数生成总票行并删除旧明细行的方法

Pandas 实现按分组补全总票统计行方案

核心逻辑

优先保留原始数据中已有的Mode=TOTAL行,仅对没有提供总票数的分组,用对应明细行的票数汇总生成新的TOTAL行,最终仅保留所有TOTAL行。

实现代码

import pandas as pd

# 1. 拆分原始数据中已有的总票行和明细行
exist_total = df[df["Mode"] == "TOTAL"].copy()
detail_rows = df[df["Mode"] != "TOTAL"].copy()

# 2. 筛选出没有对应总票行的明细数据
# 提取已有总票的分组标识
total_group_keys = exist_total[["State", "County", "Candidate"]].drop_duplicates()
# 匹配过滤得到需要计算总票的明细
need_calc_detail = detail_rows.merge(
    total_group_keys,
    on=["State", "County", "Candidate"],
    how="left",
    indicator=True
).query('_merge == "left_only"').drop(columns="_merge")

# 3. 分组汇总生成新的总票行
new_total = need_calc_detail.groupby(
    ["State", "County", "Candidate"], as_index=False
)["CandidateVotes"].sum()
new_total["Mode"] = "TOTAL"

# 4. 合并原有和新增总票行得到最终结果
final_df = pd.concat([exist_total, new_total], ignore_index=True)

简化场景方案

如果你不需要保留原始提供的TOTAL值,希望所有分组都统一用明细票数求和得到总票,可以直接用下面更简单的代码:

final_df = df.groupby(
    ["State", "County", "Candidate"], as_index=False
)["CandidateVotes"].sum()
final_df["Mode"] = "TOTAL"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:06:03