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

Pandas列值拼接生成新字段时如何排除满足指定条件的记录

问题解决方案

你原有代码存在两个待优化点:

  • 未实现分组内排除Cond=True记录的逻辑
  • 拼接后缀时取的是当前行的Code,而非分组内最新记录的Code,也没有保证同ID所有行的Sequence值完全一致

可直接运行的修改后代码

import pandas as pd

def gen_sequence(group):
    # 过滤分组内Cond为True的无效记录
    valid = group[~group['Cond']]
    # 对有效年份升序排序后拼接(与你示例输出的年份顺序匹配)
    year_str = 'x'.join(sorted(valid['Year'].astype(str)))
    # 取分组内Year最大的最新记录对应的Code
    latest_code = valid.loc[valid['Year'].idxmax(), 'Code']
    # 同分组所有行返回相同的Sequence值
    return pd.Series([f"{year_str}_{latest_code}"] * len(group), index=group.index)

df['Sequence'] = df.groupby('ID', group_keys=False).apply(gen_sequence)

逻辑说明

  1. 按ID分组后对每个分组独立处理
  2. 先过滤掉分组内Cond为True的记录,只保留有效行用于计算
  3. 对有效行的Year字段排序后用x拼接成年份部分
  4. 取有效行中Year最大值对应的Code作为后缀,用下划线拼接在年份部分后
  5. 给分组内所有行返回相同的计算结果,保证同ID的Sequence完全一致

如果你需要年份按降序拼接,把sorted改成sorted(..., reverse=True)即可。

内容的提问来源于stack exchange,提问作者Jan Valušek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:18:02