Python 如何将该forloop转换为lambda函数以提高速度
此forloop需要3天才能完成。我怎样才能提高速度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日期,则将销售订单项目值添加到已交付列 每行的日期
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()
?对不起,我不知道如何在代码中实现上面这一行