我有 2 个 Pandas 数据帧,每个数据帧超过 20K 行。
DF 1
index Number From_Date To_Date
0 1212 05/03/21 05/05/21
1 1213 05/04/21 05/09/21
2 1213 05/08/21 05/12/21
3 1215 05/13/21 05/15/21
4 1216 05/16/21 05/23/21
DF 2
index Number Date Delivered
0 1212 05/04/21 True
1 1213 05/05/21 True
2 1214 05/07/21 False
3 1212 05/19/21 True
4 1216 05/30/21 True
现在我想在 DF1 Delivered
中添加新列,如果来自 DF1 的数字存在于 DF2 中并且日期介于 From_Date 和 To_Date 之间。
我曾尝试使用 DF apply 和 Looping through DF and Filtering out row from DF2 in the loop 但它需要大约 2 分钟才能完成。
我想要一个快速而干净的方法。
预期输出
DF 1
index Number From_Date To_Date Delivered
0 1212 05/03/21 05/05/21 Yes
1 1213 05/04/21 05/09/21 Yes
2 1213 05/08/21 05/12/21 No
3 1215 05/13/21 05/15/21 No
4 1216 05/16/21 05/23/21 No
答案 0 :(得分:1)
df = df1.merge(df2, how = 'inner', left_on = 'Number', right_on = 'Number')
df['Delivered'] = (df['Date'] >= df['From_Date']) & (df['Date'] <= df['To_Date'])
如果这仍然需要很长时间,请考虑使用 pySpark 而不是 Pandas。