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

Pandas实现按日期差复制行并递增Start列的技术需求

解决Pandas按日期差展开行的问题

步骤说明

  • 先把日期列转换成Pandas可识别的datetime格式,避免解析错误
  • 对每行生成从Start到End前一天的日期序列(示例中不包含End当天)
  • 将日期序列炸开成多行,保留其他列的对应值
  • 最后把日期转回原始字符串格式

完整代码

import pandas as pd

# 构造原始数据(如果是读取外部数据,替换成pd.read_csv等方法)
df = pd.DataFrame({
    'Name': ['Sam', 'Uber', 'Twitter'],
    'Start': ['04-03-2022', '24-04-2022', '26-04-2022'],
    'End': ['06-03-2022', '27-04-2022', '28-04-2022'],
    'Units': [2, 1, 2],
    'Place': ['CA', 'SVL', 'FR']
})

# 转换日期列格式(匹配原始的DD-MM-YYYY格式)
df['Start'] = pd.to_datetime(df['Start'], format='%d-%m-%Y')
df['End'] = pd.to_datetime(df['End'], format='%d-%m-%Y')

# 生成日期序列并展开行
df_expanded = df.assign(
    # 生成从Start到End前一天的每日日期序列
    Start=lambda x: x.apply(lambda row: pd.date_range(row['Start'], row['End'] - pd.Timedelta(days=1), freq='D'), axis=1)
).explode('Start')  # 将列表格式的日期序列炸开为多行

# 移除不需要的End列,将日期转回原始字符串格式
df_expanded = df_expanded.drop('End', axis=1)
df_expanded['Start'] = df_expanded['Start'].dt.strftime('%d-%m-%Y')

# 查看最终结果
print(df_expanded)

输出结果

Name        Start  Units Place
0       Sam  04-03-2022      2    CA
0       Sam  05-03-2022      2    CA
1      Uber  24-04-2022      1   SVL
1      Uber  25-04-2022      1   SVL
1      Uber  26-04-2022      1   SVL
2  Twitter  26-04-2022      2    FR
2  Twitter  27-04-2022      2    FR

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:18:27