【发布时间】:2018-12-07 03:26:40
【问题描述】:
我有一个 Pandas df,其中一列 (Reservation_Dt_Start) 表示日期范围的开始,另一列 (Reservation_Dt_End) 表示日期范围的结束。
我想扩展每一行,使其包含与日期范围内的日期一样多的记录,而不是每一行都有一个日期范围,每个新行代表其中一个日期。
有关示例输入和所需输出,请参见下面的两张图片。
下面的代码 sn-p 有效!!但是,对于输入表中的每 250 行,运行需要 1 秒。鉴于我的输入表大小为 120,000,000 行,此代码将需要大约一周的时间才能运行。
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)
必须有一种更快的方法来做到这一点。有任何想法吗?谢谢!
【问题讨论】:
-
我认为这是您将获得的最好的:vectorized implementation to create multiple rows from a single row。但这仍然是一个极其缓慢的过程。