You need to enable JavaScript to run this app. Python pandas按id分组查找最后一条bill记录生成newtype列实现
优惠活动
大模型
产品
解决方案
定价
更多

Python pandas按id分组查找最后一条bill记录生成newtype列实现

Pandas 按分组取指定条件最后一条值回填全列的实现方法

核心实现逻辑

  • 先从原表中筛出所有满足skill == 'bill'的行,提前剔除无关数据减少计算量
  • 按id字段分组后,取每组内最后一条满足条件的记录对应的type值,构建id与目标值的映射关系
  • 将映射关系匹配回原表的id列,直接生成newtype新列

可直接复用的代码

import pandas as pd

# 示例输入数据
df = pd.DataFrame({
    "id": [1, 1, 1, 2, 2, 3, 3, 3, 4],
    "skill": ['cc', 'bill', 'cc', 'cc', 'bill', 'a', 'bill', 'bill', 'bill'],
    "type": ['a', 'a', 'b', 'b', 'a', 'a', 'a', 'b', 'a']
})

# 构建每个id对应的newtype映射表
id_target_map = (
    df[df['skill'] == 'bill']
    .groupby('id')
    .tail(1)  # 取每个id组内最后一条bill类型的记录
    .set_index('id')['type']
)

# 生成新列
df['newtype'] = df['id'].map(id_target_map)

运行结果验证

执行上述代码后,输出的表结构和数值与预期完全匹配:

id skill type newtype
0   1    cc    a       a
1   1  bill    a       a
2   1    cc    b       a
3   2    cc    b       a
4   2  bill    a       a
5   3     a    a       b
6   3  bill    a       b
7   3  bill    b       b
8   4  bill    a       a

注意事项

  • 相比对全表逐组做apply过滤的写法,这种先筛后分组的方式处理大表时效率更高
  • 如果数据中存在部分id组完全没有skill == 'bill'的记录,匹配后这些行的newtype会是NaN,可按需用fillna()补充默认值,例如:
    # 给没有bill记录的行填充默认值'unknown'
    df['newtype'] = df['id'].map(id_target_map).fillna('unknown')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 23:54:08