Python 熊猫-日期范围内每天的新行
我有一个字段,其中一列(Reservation_Dt_Start)表示日期范围的开始,另一列(Reservation_Dt_End)表示日期范围的结束 不是每一行都有一个日期范围,我想扩展每一行,使其具有与日期范围中的日期相同的记录,每一新行表示其中一个日期 请参见下面的两张图片,了解示例输入和所需输出 下面的代码片段可以工作!!但是,对于输入表中的每250行,运行需要1秒。考虑到我的输入表的大小是120000000行,这段代码运行大约需要一周时间Python 熊猫-日期范围内每天的新行,python,pandas,Python,Pandas,我有一个字段,其中一列(Reservation_Dt_Start)表示日期范围的开始,另一列(Reservation_Dt_End)表示日期范围的结束 不是每一行都有一个日期范围,我想扩展每一行,使其具有与日期范围中的日期相同的记录,每一新行表示其中一个日期 请参见下面的两张图片,了解示例输入和所需输出 下面的代码片段可以工作!!但是,对于输入表中的每250行,运行需要1秒。考虑到我的输入表的大小是120000000行,这段代码运行大约需要一周时间 pd.concat([pd.DataFram
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'])
我认为这是您将获得的最好结果:。但这仍然是一个非常缓慢的过程,需要注意的是,这个问题的解决方案只涉及一次——它构建了一个数据帧的中间列表。如果您的解决方案更快,很可能是因为构建所有这些数据帧的开销。