如何在DataFrame多组数据中仅修改每组的第二行数据
问题需求
对DataFrame df_task中的每组数据按以下规则处理:
- 组内包含3行数据时,将该组第二行的
Task值与组内第一行的Task值拼接,生成新列New_Task - 组内仅2行数据时,
New_Task直接沿用Task原值,不做修改
示例输入数据:
import pandas as pd df_task = pd.DataFrame({'Days':[5,5,5,20,20,20,10,10], 'Task':['Programing','Presentation','Training','Development','Presentation','Workshop','Coding','Communication']},)
期望输出:
Days Task New_Task 0 5 Programing Programing 1 5 Presentation Presentation,Programing 2 5 Training Training 3 20 Development Development 4 20 Presentation Presentation,Development 5 20 Workshop Workshop 6 10 Coding Coding 7 10 Communication Communication
解决方案
通过groupby结合自定义处理函数实现需求,完整代码如下:
import pandas as pd df_task = pd.DataFrame({'Days':[5,5,5,20,20,20,10,10], 'Task':['Programing','Presentation','Training','Development','Presentation','Workshop','Coding','Communication']},) def process_group(group): # 初始化New_Task为Task列的副本 group['New_Task'] = group['Task'] # 仅处理行数为3的组 if len(group) == 3: # 定位组内第二行,拼接第一行的Task值 second_row_idx = group.index[1] group.loc[second_row_idx, 'New_Task'] = f"{group.loc[second_row_idx, 'Task']},{group.iloc[0]['Task']}" return group # 按Days分组处理,保持原索引结构 df_result = df_task.groupby('Days', group_keys=False).apply(process_group) print(df_result)
代码说明
- 先为每个组的
New_Task列赋初始值,直接复制Task列的内容,确保所有行都有基础值 - 针对行数为3的组,找到组内第二行的索引,将该行的
New_Task修改为当前Task值+逗号+组内第一行Task值的格式 - 使用
group_keys=False参数,避免分组键被添加到结果的索引中,保持原数据的索引结构不变
内容的提问来源于stack exchange,提问作者the phoenix
相关产品推荐
相关产品推荐

