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

如何基于日期列条件在pandas DataFrame中为各ID插入新行

pandas 按ID分组在最大日期末行后插入新行实现方案

核心逻辑:先把日期列转为可比较的 datetime 类型,按ID分组后找到每个ID最大日期对应的最后一行,复制该行后修改col4取值,再拼接到原分组末尾即可。

完整实现代码

1. 依赖导入及示例数据构造(测试用,可跳过)

import pandas as pd
import numpy as np

# 构造示例DataFrame
data = {
    'ID': [1,1,1,2,2],
    'Date': ['25/08/2021','27/08/2021','27/08/2021','27/08/2021','27/08/2021'],
    'col3': ['Manual','Automatic','Manual','Automatic','Automatic'],
    'col4': [np.nan, np.nan, np.nan, np.nan, np.nan]
}
df = pd.DataFrame(data)

2. 核心处理代码

# 日期格式转换,避免字符串比较出现错误
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')

# 可选步骤:按ID、日期排序,保证同ID下日期升序排列,确保最大日期行在分组末尾
df = df.sort_values(['ID', 'Date']).reset_index(drop=True)

# 自定义分组处理函数
def insert_added_row(group):
    # 取当前分组的最大日期
    max_date = group['Date'].max()
    # 取最大日期对应的最后一行数据
    target_row = group[group['Date'] == max_date].iloc[-1].copy()
    # 修改col4列取值
    target_row['col4'] = 'Added'
    # 拼接原分组数据和新行后返回
    return pd.concat([group, target_row.to_frame().T], ignore_index=True)

# 按ID分组执行处理
result = df.groupby('ID', group_keys=False).apply(insert_added_row).reset_index(drop=True)

# 可选步骤:把日期列转回原始的字符串格式
result['Date'] = result['Date'].dt.strftime('%d/%m/%Y')

处理完成后直接输出result即可得到符合要求的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:42:02