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

如何基于pandas DataFrame的id1与Name列生成拆分汇总行并追加回原表

解决方案

你只需要调整聚合逻辑,在每个指定id分组下额外按Name列做二次聚合即可,不需要单独处理列表展开,完整代码如下:

import pandas as pd
import numpy as np

# 原始数据构造
d = {'id1': ['85643', '85644','8564312','8564314','85645','8564316','85646','8564318','85647','85648','85649','85655'],
     'ID': ['G-00001', 'G-00001','G-00002','G-00002','G-00001','G-00002','G-00001','G-00002','G-00001','G-00001','G-00001','G-00001'],
     'col1': [1, 2,3,4,5,60,0,0,6,3,2,4],
     'Goal': [np.nan, 56,np.nan,89,73,np.nan ,np.nan ,np.nan, np.nan, np.nan, 34,np.nan ],
     'col2': [3, 4,32,43,55,610,0,0,16,23,72,48],
     'col3': [1, 22,33,44,55,60,1,5,6,3,2,4],
     'Name': ['a1asd', 'a2asd','aabsd','aabsd','a3asd','aabsd','aasd','aabsd','aasd','aasd','aasd','aasd'],
     'Date': ['2021-06-13', '2021-06-13','2021-06-13','2021-06-14','2021-06-15','2021-06-15','2021-06-13','2021-06-16','2021-06-13','2021-06-13','2021-06-13','2021-06-16']}
dff = pd.DataFrame(data=d)

# 指定id分组
b65 = ['85643','85645', '85655','85646']
b66 = ['85643','85645','85647','85648','85649','85644']
b67 = ['8564312','8564314','8564316','8564318']
d_map = {'b65': b65, 'b66': b66, 'b67': b67}

# 定义聚合规则
agg_rules = {'col1': 'sum', 'col2': 'sum', 'col3': 'mean'}

# 生成所有汇总行
sum_dfs = []
for group_id, id_list in d_map.items():
    # 过滤当前id分组的行,按Name做聚合
    tmp_df = dff[dff['id1'].isin(id_list)].groupby('Name', as_index=False).agg(agg_rules)
    # 给汇总行设置对应ID值
    tmp_df['ID'] = group_id
    sum_dfs.append(tmp_df)
sum_df = pd.concat(sum_dfs, ignore_index=True)

# 拼接原表和汇总表
result = pd.concat([dff, sum_df], ignore_index=True)
print(result)

逻辑说明

  1. 遍历每个自定义id分组,先筛选出符合id范围的所有行
  2. 对筛选后的行按Name列分组,按照要求的规则做聚合,直接生成每个Name对应的单行汇总结果
  3. 给聚合后的行标记对应的自定义ID(b65/b66/b67)
  4. 所有汇总行拼接完成后,再和原表做纵向拼接,未定义的列(id1、Goal、Date)会自动填充NaN,完全符合预期输出要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:24:07