使用while、for、if-else条件的 python 低速

2024-04-20 12:37:26 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我有下面的python代码。 我每次比较多个列和一个单一的数据是基于某个标志值的存在。这里显示了两个这样的集合。ST9和ST1 我使用while循环,for和if-else条件。但这一过程几乎需要13分钟。如何提高计算速度。你知道吗

i=0
Reslt_9=[]

while i<len(xx):
    for val in xx.ST9:
      if val==4:
         xz = xx[['SV1','SV2','SV3','SV4','SV5','SV6','SV7','SV8','SV9','SV10','SV11','SV12']].eq(xx['G9'], axis=0).assign(no = True)
         i1 = xz.values.argmax(axis=1)
         Reslt_9 =  np.append(Reslt_9,xx['R9'][i] -xx[['PR1','PR2','PR3','PR4','PR5','PR6','PR7','PR8','PR9','PR10','PR11','PR12']].assign(no = np.nan).values[xx.index, i1][i])
      elif val==2:
         Reslt_9=np.append(Reslt_9,0) 
      i=i+1

a2=0
Reslt_1=[]
aa=read_data
while a2<len(aa):
# Debug area
    for val1 in aa.ST1:
      if val1==4:
           a = aa[['SV1','SV2','SV3','SV4','SV5','SV6','SV7','SV8','SV9','SV10','SV11','SV12']].eq(aa['G1'], axis=0).assign(no = True)
           a1 = a.values.argmax(axis=1)
           Reslt_1 = np.append(Reslt_1,aa['R1'][a2] - aa[['PR1','PR2','PR3','PR4','PR5','PR6','PR7','PR8','PR9','PR10','PR11','PR12']].assign(no = np.nan).values[aa.index, a1][a2])
      elif val1==2:
           Reslt_1 = np.append(Reslt_1,0)
      a2=a2+1
   .....................
   # input data 
   #I have 60 columns and 10871 rows.
   # For every row I am comparing any 1 item(lets say sv1) of set-1 with set-2 if corresponding flag column is 4 otherwise default zero. 


          set-1                                       set-2
  3  6  11  31  22  23  14  17  19  1  with  1  14  3   23  6   11  31  17  9   19  22  10     #(Flag->)  4  4  4   4   4   4   4   4   2   4   4   2 

Tags: noa2forifnpvalaavalues