如何用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)
代码逻辑说明
- 先创建临时列:仅在
Employee_Title为Manager的行填入对应Employee_Name,其余行设为缺失值 - 按
Group分组后,使用ffill()(向前填充)将每个组内的经理姓名填充到后续所有行,实现“累计保留上一个有效经理姓名”的效果
内容的提问来源于stack exchange,提问作者datapy
相关产品推荐
相关产品推荐

