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

使用Pandas GroupBy按条件替换列中特定字符并调整内容

分组替换并添加后缀的实现方案

原始DataFrame

import pandas as pd

df = pd.DataFrame({
    'ACCOUNT': [1, 1, 2, 2], 
    'ASSET_CLASS': ['11201XX FI CHF', '11201XX FI CHF', 
                    '12201XX FI EUR', '12201XX FI EUR',
                   ],
})
display(df)

输出:

ACCOUNT ASSET_CLASS     
0   1       11201XX FI CHF  
1   1       11201XX FI CHF  
2   2       12201XX FI EUR  
3   2       12201XX FI EUR  

需求

以ACCOUNT为分组变量,使用groupby函数,针对每个账户的ASSET_CLASS列完成以下操作:

  • 将列中的"XX"分别替换为"01"和"02"
  • 替换为"01"时,在末尾添加后缀"Gov";替换为"02"时添加后缀"Corporate"

期望结果

df_result = pd.DataFrame({
    'ACCOUNT': [1, 1, 2, 2], 
    'ASSET_CLASS': ['1120101 FI CHF Gov', '1120102 FI CHF Corporate',
                    '1220101 FI EUR Gov', '1220102 FI EUR Corporate',
                   ],
})
display(df_result)

输出:

ACCOUNT ASSET_CLASS
0   1       1120101 FI CHF Gov
1   1       1120102 FI CHF Corporate
2   2       1220101 FI EUR Gov
3   2       1220102 FI EUR Corporate

实现方案

方法一:自定义分组处理函数

通过groupby结合apply,自定义函数处理每个分组:

import pandas as pd

def process_group(group):
    # 定义替换规则:替换值 + 对应后缀
    replace_rules = [("01", "Gov"), ("02", "Corporate")]
    base_str = group['ASSET_CLASS'].iloc[0]
    new_asset_classes = []
    for repl_val, suffix in replace_rules:
        new_str = base_str.replace("XX", repl_val) + f" {suffix}"
        new_asset_classes.append(new_str)
    # 返回处理后的分组DataFrame
    return pd.DataFrame({
        'ACCOUNT': [group['ACCOUNT'].iloc[0]] * 2,
        'ASSET_CLASS': new_asset_classes
    })

# 分组处理并合并结果
df_result = df.groupby('ACCOUNT', group_keys=False).apply(process_group).reset_index(drop=True)
display(df_result)

方法二:Lambda简洁实现

直接在groupby.apply中用lambda表达式完成赋值,代码更紧凑:

df_result = df.groupby('ACCOUNT').apply(
    lambda g: g.assign(
        ASSET_CLASS = [
            g['ASSET_CLASS'].iloc[0].replace("XX", "01") + " Gov",
            g['ASSET_CLASS'].iloc[0].replace("XX", "02") + " Corporate"
        ]
    )
).reset_index(drop=True)
display(df_result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:06:12