Python 如何将该forloop转换为lambda函数以提高速度

Python 如何将该forloop转换为lambda函数以提高速度,python,pandas,Python,Pandas,此forloop需要3天才能完成。我怎样才能提高速度 for i in range(df.shape[0]): df.loc[df['Creation date'] >= pd.to_datetime(str(df['Original conf GI dte'].iloc[i])),'delivered'] += df['Sale order item'].iloc[i] 我认为forloop足以理解 如果创建日期大于原始配置GI日期,则将销售订单项目值添加到已交付列 每行的日期

此forloop需要3天才能完成。我怎样才能提高速度

for i in range(df.shape[0]):
    df.loc[df['Creation date'] >= pd.to_datetime(str(df['Original conf GI dte'].iloc[i])),'delivered'] += df['Sale order item'].iloc[i]
我认为forloop足以理解

如果创建日期大于原始配置GI日期,则将
销售订单项目
值添加到
已交付

每行的日期为“接受日期”(
交付日期
为未来日期)。输入为
订单发票
接受日期
交付日期
…输出为
交付

Order Quantity            Date Accepted        Date Delivered       Delivered
     20                     01-05-2010            01-02-2011           0
     10                     01-11-2010            01-03-2011           0
     300                    01-12-2010            01-09-2011           0     
     5                      01-03-2011            01-03-2012           30
     20                     01-04-2012            01-11-2013           335
     10                     01-07-2013            01-12-2014           335

如果我理解正确,你可以使用速度。当前,您正在数据帧行上循环,而numpy操作旨在操作整个列:

cond= df['Creation date'].ge(pd.to_datetime(str(df['Original conf GI dte'])))
df['delivered']=np.where(cond,df['delivered']+df['Sale order item'],df['delivered'])

按将值转换为numpy数组,将其与广播进行比较,按和最后一次匹配
顺序
值:

date1 = df['Date Accepted'].to_numpy()
date2 = df['Date Delivered'].to_numpy()
order = df['Order Quantity'].to_numpy()

#oldier pandas versions
#date1 = df['Date Accepted'].values
#date2 = df['Date Delivered'].values
#order = df['Order Quantity'].values

df['Delivered1'] = np.where(date1[:, None] >= date2, order, 0).sum(axis=1)
print (df)
   Order Quantity Date Accepted Date Delivered  Delivered  Delivered1
0              20    2010-01-05     2011-01-02          0           0
1              10    2010-01-11     2011-01-03          0           0
2             300    2010-01-12     2011-01-09          0           0
3               5    2011-01-03     2012-01-03         30          30
4              20    2012-01-04     2013-01-11        335         335
5              10    2013-01-07     2014-01-12        335         335

请发布一个小样本的输入和相应的期望输出。它不会给出相同的结果。我会尽量多解释的,谢谢,这与这个问题有关。我找到了一种方法来计算
TotalOrdersCreated
(使用cumsum),现在我正试图找到一种方法来计算
交付的
。然后我将减去TotalOrdersCreated Delivered,以生成待处理的
。(待定是该问题中的预期输出)。现在清楚了吗,先生?@TomHolland-我想是的,在你的解决方案中没有必要求和像
df['Creation date']>=pd.to_datetime(str(df['Original conf GI dte']].iloc[I])。sum()
?对不起,我不知道如何在代码中实现上面这一行