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

Pandas处理日期差超8天数据:拆分行并同步相关列值

Pandas DataFrame插入间隔行解决方案

需求回顾

当Pandas DataFrame中相邻行的日期间隔(上一行End Date到当前行Start Date的天数)超过8天时,需插入符合规则的新行:

  • 新行Start Date = 上一行End Date
  • 新行End Date = 当前行Start Date
  • 新行Close1、NF_BEES1 = 上一行Close2、NF_BEES2
  • 新行Close2、NF_BEES2 = 当前行Close1、NF_BEES1
  • 新行Difference = Close2 - Close1,Days Difference = 新行End Date与Start Date的间隔天数

常见问题排查

原代码未达预期的常见原因:

  • 日期列未转换为datetime类型,导致天数计算失效
  • 遍历过程中未动态维护处理后的上一行(仍使用原数据的上一行,忽略已插入的新行)
  • 新行的列值映射错误(如Close1/Close2的来源取反)

实现代码

1. 示例数据准备

import pandas as pd

# 构造示例原DataFrame
data = {
    'Start Date': ['2023-01-01', '2023-01-15', '2023-02-05'],
    'End Date': ['2023-01-05', '2023-01-20', '2023-02-10'],
    'Close1': [100, 110, 120],
    'Close2': [105, 112, 125],
    'NF_BEES1': [50, 55, 60],
    'NF_BEES2': [52, 56, 62],
    'Difference': [5, 2, 5],
    'Days Difference': [4, 5, 5]
}

df = pd.DataFrame(data)
# 转换日期列为datetime类型(关键步骤,否则无法正确计算天数)
df['Start Date'] = pd.to_datetime(df['Start Date'])
df['End Date'] = pd.to_datetime(df['End Date'])

2. 核心处理逻辑

# 存储处理后的所有行数据
processed_rows = []

# 先加入第一行数据作为初始行
processed_rows.append(df.iloc[0].to_dict())

# 从第二行开始遍历原DataFrame
for i in range(1, len(df)):
    # 取处理后的最后一行(可能是原行或已插入的新行)作为上一行
    prev_row = processed_rows[-1]
    current_row = df.iloc[i].to_dict()
    
    # 计算上一行End与当前行Start的间隔天数
    days_diff = (current_row['Start Date'] - prev_row['End Date']).days
    
    # 间隔超过8天则插入新行
    if days_diff > 8:
        new_row = {
            'Start Date': prev_row['End Date'],
            'End Date': current_row['Start Date'],
            'Close1': prev_row['Close2'],
            'NF_BEES1': prev_row['NF_BEES2'],
            'Close2': current_row['Close1'],
            'NF_BEES2': current_row['NF_BEES1'],
            'Difference': current_row['Close1'] - prev_row['Close2'],
            'Days Difference': days_diff
        }
        processed_rows.append(new_row)
    
    # 加入当前行数据
    processed_rows.append(current_row)

# 转换为最终的DataFrame
result_df = pd.DataFrame(processed_rows)
print(result_df)

输出说明

运行代码后,会自动在日期间隔超8天的位置插入符合规则的新行。例如原数据中第一行End Date(2023-01-05)与第二行Start Date(2023-01-15)间隔10天,会插入填补该间隔的新行,列值完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:42:07