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

如何基于分组规则重构pandas dataframe,新增合计与带籽水果统计行

实现代码

核心思路是按source分组计算汇总行后和保留的原始行拼接,无需手动插入空行,适配性更强:

import pandas as pd

# 构造示例原始数据,可替换为你自己的df
df = pd.DataFrame({
    'source': ['a','a','a','b','b','b'],
    'fruit': ['apple','banana','orange','apple','banana','orange'],
    '2019': [3,4,2,3,4,1],
    '2020': [1,3,2,4,5,6],
    '2021': [1,5,2,5,2,4]
})

# 配置项:带籽水果列表、年份列名
seed_fruits = ['apple', 'orange']
year_cols = ['2019', '2020', '2021']

# 计算total汇总行:每个source所有水果的年度总和
total_df = df.groupby('source', as_index=False)[year_cols].sum()
total_df['fruit'] = 'total'

# 计算seeds汇总行:每个source仅带籽水果的年度总和
seeds_df = df[df['fruit'].isin(seed_fruits)].groupby('source', as_index=False)[year_cols].sum()
seeds_df['fruit'] = 'seeds'

# 保留原始数据中banana的行
banana_df = df[df['fruit'] == 'banana'].reset_index(drop=True)

# 拼接所有行并调整顺序为 total -> seeds -> banana
res = pd.concat([total_df, seeds_df, banana_df], ignore_index=True)
fruit_order = {'total': 0, 'seeds': 1, 'banana': 2}
res['sort_col'] = res['fruit'].map(fruit_order)
res = res.sort_values(['source', 'sort_col']).drop('sort_col', axis=1).reset_index(drop=True)

# 输出结果
print(res)

运行后输出的res完全符合你给出的目标格式。该方案无需手动计算行插入位置,支持任意数量的source分组,后续调整汇总规则时只需修改对应分组逻辑即可,比逐行插入的方案性能和可维护性都更高。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 07:06:04