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

如何在Python DataFrame中按条件分组添加求和行(assetClass=99)

解决方案:分组聚合新增行并合并到原DataFrame

你要做的其实是分组聚合(GroupBy Aggregation)+ 行追加合并的组合操作,这在pandas里是很常见的数据集增强需求,我来给你一步步拆解实现方案:

步骤说明

  1. 从原DataFrame中筛选出assetClass在11-16范围内的行
  2. 按clientID和date分组,对value列求和
  3. 为聚合后的结果设置assetClass=99,并为其他需保留的列填充空值(NaN)
  4. 将聚合生成的新行和原DataFrame合并

代码示例

1. 构造样例数据(模拟你的数据集)

import pandas as pd
import numpy as np

# 模拟你的DataFrame,包含需要保留的其他列
data = {
    'clientID': [1, 1, 1, 2, 2],
    'date': ['2024-01-01', '2024-01-01', '2024-01-02', '2024-01-01', '2024-01-02'],
    'assetClass': [2, 11, 15, 12, 3],
    'value': [100, 200, 300, 150, 50],
    'other_col1': ['A', 'B', 'C', 'D', 'E'],  # 需保留的列1
    'other_col2': [10, 20, 30, 40, 50]       # 需保留的列2
}
df = pd.DataFrame(data)

2. 分组聚合生成assetClass=99的行

# 筛选目标assetClass范围的行,按clientID+date分组求和value
aggregated_rows = df[df['assetClass'].between(11, 16)] \
    .groupby(['clientID', 'date'], as_index=False) \
    .agg({'value': 'sum'}) \
    .assign(assetClass=99)  # 设置新行的assetClass为99

# 自动识别所有需保留的其他列,填充为NaN(空值)
keep_columns = [col for col in df.columns if col not in ['clientID', 'date', 'assetClass', 'value']]
for col in keep_columns:
    aggregated_rows[col] = np.nan

3. 合并原数据和新生成的行

# 合并两个数据集,重置索引
final_df = pd.concat([df, aggregated_rows], ignore_index=True)

# 可选:按clientID、date、assetClass排序,让结果更规整
final_df.sort_values(by=['clientID', 'date', 'assetClass'], inplace=True)

关键细节说明

  • 使用between(11,16)可以简洁筛选出11到16的assetClass,避免手动列举[11,12,13,14,15,16]
  • groupby时设置as_index=False,确保clientID和date保持为普通列,方便后续合并
  • 自动识别保留列的方式,让代码在新增保留列时不需要手动修改,更灵活
  • 如果需要给保留列设置特定默认值(而非NaN),直接把np.nan替换成你需要的值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:32:48