【问题标题】:Optimize the execution speed and improve the readability of code优化执行速度,提高代码可读性
【发布时间】:2020-07-28 16:42:32
【问题描述】:

如何优化以下代码的速度并提高可读性?

for j in range(len(Relevant_data)):
    for x in ['A', 'BB', 'BV', 'Cy', 'R','T']:
      if Relevant_data['Type'].iloc[j]==x:
           if Relevant_data['Amount'].iloc[j]>=np.asscalar(t.loc[x,0.0].values) and Relevant_data['Amount'].iloc[j]<np.asscalar(t.loc[x,0.25].values):
                Relevant_data['Bin'].iloc[j]="{} of {}".format("Bin1",x)
            elif Relevant_data['Amount'].iloc[j]>=np.asscalar(t.loc[x,0.25].values) and Relevant_data['Amount'].iloc[j]<np.asscalar(t.loc[x,0.50].values):
                Relevant_data['Bin'].iloc[j]="{} of {}".format("Bin2",x)
            elif Relevant_data['Amount'].iloc[j]>=np.asscalar(t.loc[x,0.50].values) and Relevant_data['Amount'].iloc[j]<np.asscalar(t.loc[x,0.75].values):
                Relevant_data['Bin'].iloc[j]="{} of {}".format("Bin3",x)
            elif Relevant_data['Amount'].iloc[j]>=np.asscalar(t.loc[x,0.75].values) and Relevant_data['Amount'].iloc[j]<=np.asscalar(t.loc[x,1.00].values):
                Relevant_data['Bin'].iloc[j]="{} of {}".format("Bin4",x)

【问题讨论】:

  • 我认为将其转换为 lambda 函数不是一个好主意。你应该优先考虑编写可读的代码。
  • lambda 函数只是语法糖——你的意思是np.,vectorize
  • 我想缩短执行时间。对此方向的任何帮助将不胜感激。
  • 请提供最小的可重现代码。谢谢。

标签: python pandas numpy dataframe lambda


【解决方案1】:

我能够提高代码的可读性并缩短执行时间。

def analyze(Amount_R,Type_R): 
    if np.asscalar(t.loc[Type_R,0.0].values)<=Amount_R<np.asscalar(t.loc[Type_R,0.25].values):
        return "{} of {}".format("Bin1",Type_R)  
    if np.asscalar(t.loc[Type_R,0.25].values)<=Amount_R<np.asscalar(t.loc[Type_R,0.50].values):
        return "{} of {}".format("Bin2",Type_R) 
    if np.asscalar(t.loc[Type_R,0.50].values)<=Amount_R<np.asscalar(t.loc[Type_R,0.75].values):
        return "{} of {}".format("Bin3",Type_R)  
    if np.asscalar(t.loc[Type_R,0.75].values)<=Amount_R<=np.asscalar(t.loc[Type_R,1.00].values):
        return "{} of {}".format("Bin4",Type_R) 
Relevant_data_Retailers['Bin']=np.vectorize(analyze)(Relevant_data_Retailers['Transaction_Amount'],Relevant_data_Retailers['Transaction_Type'])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    相关资源
    最近更新 更多