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

如何用Python Pandas按条件累计创建新字符串列Group_Manager

分组填充组内经理姓名的解决方案

原始数据

现有数据集df:

Group | Employee_Title | Employee_Name  
A     | Manager        | John     
A     | Analyst        | Adam     
A     | Analyst        | Smith    
B     | Manager        | Bill    
B     | Analyst        | Ed    
B     | Analyst        | Jay 

目标效果

需要新增Group_Manager列,使每个组内的所有行都填充对应组的经理姓名:

Group | Employee_Title | Employee_Name | Group_Manager 
A     | Manager        | John          | John
A     | Analyst        | Adam          | John           
A     | Analyst        | Smith         | John    
B     | Manager        | Bill          | Bill    
B     | Analyst        | Ed            | Bill       
B     | Analyst        | Jay           | Bill  

错误尝试代码

以下代码无法正常运行:

df['Group_Manager']=df.groupby('Group').apply(lambda Employee_Title,Employee_Name: Employee_Name if Employee_Title=="Manager" else keep previous Group_Manager)

累计式实现代码

通过分组向前填充的方式实现需求,代码如下:

import pandas as pd

# 构造示例数据(如果已有df可跳过这部分)
data = {
    'Group': ['A', 'A', 'A', 'B', 'B', 'B'],
    'Employee_Title': ['Manager', 'Analyst', 'Analyst', 'Manager', 'Analyst', 'Analyst'],
    'Employee_Name': ['John', 'Adam', 'Smith', 'Bill', 'Ed', 'Jay']
}
df = pd.DataFrame(data)

# 生成Group_Manager列
# 第一步:标记经理行的姓名,非经理行留空
temp_col = df.apply(lambda row: row['Employee_Name'] if row['Employee_Title'] == 'Manager' else pd.NA, axis=1)
# 第二步:按Group分组,向前填充空值(即累计保留组内最近的经理姓名)
df['Group_Manager'] = temp_col.groupby(df['Group']).ffill()

# 查看结果
print(df)

代码逻辑说明

  1. 先创建临时列:仅在Employee_Title为Manager的行填入对应Employee_Name,其余行设为缺失值
  2. 按Group分组后,使用ffill()(向前填充)将每个组内的经理姓名填充到后续所有行,实现“累计保留上一个有效经理姓名”的效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:12:36