Python 熊猫-日期范围内每天的新行

Python 熊猫-日期范围内每天的新行,python,pandas,Python,Pandas,我有一个字段,其中一列(Reservation_Dt_Start)表示日期范围的开始,另一列(Reservation_Dt_End)表示日期范围的结束 不是每一行都有一个日期范围,我想扩展每一行,使其具有与日期范围中的日期相同的记录,每一新行表示其中一个日期 请参见下面的两张图片,了解示例输入和所需输出 下面的代码片段可以工作!!但是,对于输入表中的每250行,运行需要1秒。考虑到我的输入表的大小是120000000行,这段代码运行大约需要一周时间 pd.concat([pd.DataFram

我有一个字段,其中一列(Reservation_Dt_Start)表示日期范围的开始,另一列(Reservation_Dt_End)表示日期范围的结束

不是每一行都有一个日期范围,我想扩展每一行,使其具有与日期范围中的日期相同的记录,每一新行表示其中一个日期

请参见下面的两张图片,了解示例输入和所需输出

下面的代码片段可以工作!!但是,对于输入表中的每250行,运行需要1秒。考虑到我的输入表的大小是120000000行,这段代码运行大约需要一周时间

pd.concat([pd.DataFrame({'Book_Dt': row.Book_Dt,
                         'Day_Of_Reservation': pd.date_range(row.Reservation_Dt_Start, row.Reservation_Dt_End),
                         'Pickup': row.Pickup,
                         'Dropoff' : row.Dropoff,
                         'Price': row.Price}, 

                          columns=['Book_Dt','Day_Of_Reservation', 'Pickup', 'Dropoff' , 'Price']) 
                          for i, row in df.iterrows()], ignore_index=True)

必须有一个更快的方法来做到这一点。有什么想法吗?谢谢

pd.concat
在具有大数据集的循环中变得非常慢,因为它每次都会复制帧并返回一个新的数据帧。您正尝试这样做1.2亿次。我会尝试将这些数据作为一个简单的元组列表来处理,而不是在最后转换为dataframe

e、 g

给定一个列表
list=[]

对于数据帧中的每一行:

  • 获取日期范围列表(仍然可以在此处使用
    pd.date\u range
    )存储在变量
    dates
    中,该变量是日期列表

  • 对于日期范围内的每个日期,向列表添加一个元组
    list.append((row.Book\u Dt,dates[i],row.Pickup,row.Dropoff,row.Price))

最后,您可以将元组列表转换为数据帧:


df=pd.DataFrame(列表,列=['Book\u Dt','Day\u Of\u Reservation','pick','Dropoff','Price'])

我认为这是您将获得的最好结果:。但这仍然是一个非常缓慢的过程,需要注意的是,这个问题的解决方案只涉及一次——它构建了一个数据帧的中间列表。如果您的解决方案更快,很可能是因为构建所有这些数据帧的开销。