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

如何在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)

代码说明

  1. 先为每个组的New_Task列赋初始值,直接复制Task列的内容,确保所有行都有基础值
  2. 针对行数为3的组,找到组内第二行的索引,将该行的New_Task修改为当前Task值+逗号+组内第一行Task值的格式
  3. 使用group_keys=False参数,避免分组键被添加到结果的索引中,保持原数据的索引结构不变

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:15:31