如何基于日期列条件在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
相关产品推荐
相关产品推荐

