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
相关产品推荐
相关产品推荐

