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

为DataFrame添加列并按父级分组为每行分配子级序号

解决方案

你可以通过Pandas的分组(groupby)和累计计数(cumcount)方法实现这个需求,步骤如下:

1. 构造原始DataFrame

先还原你提供的原始数据:

import pandas as pd

data = {
    'Father': ['James', 'James', 'Corey'],
    'Son': ['Harry', 'Alfi', 'Kyle'],
    'Year': [1999, 2001, 2003]
}
df = pd.DataFrame(data)

2. 添加Child列

核心逻辑是按Father分组,组内按Year升序排序后,为每行分配从1开始的连续序号。可以用以下代码实现:

# 先按Father和Year排序,确保组内顺序符合要求
df_sorted = df.sort_values(by=['Father', 'Year'])
# 按Father分组生成从1开始的序号
df_sorted['Child'] = df_sorted.groupby('Father').cumcount() + 1

# 如果需要保留原始DataFrame的行顺序,可通过合并还原
df = df.merge(df_sorted[['Father', 'Son', 'Child']], on=['Father', 'Son'])

也可以用更简洁的链式写法:

df['Child'] = df.sort_values(['Father', 'Year']).groupby('Father').cumcount() + 1

执行后得到的结果如下:

FatherSonYearChild
JamesHarry19991
JamesAlfi20012
CoreyKyle20031

关键说明

  • sort_values(['Father', 'Year']):保证每个父亲对应的子级按出生年份从小到大排列
  • groupby('Father').cumcount():对每个分组内的行从0开始计数,加1后得到从1起始的序号

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:40:33