优化Python代码:更快的groupby和for循环

时间:2017-03-06 17:14:08

标签: python pandas for-loop group-by

我想在下面给出一个For循环,在python中更快。

# Getting all tempno1 into a list with one step
tempno1 = [np.append(tempno,ib) for ib in [xb for xb in range(0,len(xl))]]
temp = [list(set(tempk)) for tempk in tempno1]
# Taking only needed columns from x and y dfs
xtemp = xl[['Concat']]
ytemp = yl[['Concat','ships_x','ships_y','PickDate']]
#Shortlisting y df and groupby in two diff steps
ytemp = [ytemp[ytemp['Concat'].isin(np.array(xtemp['Concat'][tempnokk]))] for tempnokk in tempno1]
temptab = [ytempk.groupby('PickDate')['ships_x','ships_y'].sum().reset_index() for ytempk in ytemp]
tempkcontri = [tempk['ships_x']/tempk['ships_y'] for tempk in temptab]
tempkcontri = [pd.DataFrame(tempkcontri[i],columns=['contri']) for i in range(0,len(tempkcontri))]
temptab = [temptab[i].join(tempkcontri[i]) for i in range(0,len(temptab))]
pcv = [1 if math.isnan(scipy.stats.variation(temptabkk['contri'])) else scipy.stats.variation(temptabkk['contri']) for temptabkk in temptab]
p = pd.DataFrame({'temp' : temp,'cv': pcv})

其中,

xl,yl - 我正在使用Concat,x_ships和y_ships等列的两个数据框。

tempno - xl数据帧索引的初始列表,引用'Concat'值列表。

因此,在for循环中,我们在每次迭代中向tempno添加一个额外的索引,然后根据与'xl'数据帧的值匹配的'Concat'值来子集'yl'数据帧。然后,我们找到“变异系数”(取自scipy lib)并在新数据帧“p”中记录。

问题是,由于for循环的迭代次数变化,因此需要花费太多时间。 'group_by'行占用了最多时间。我已经尝试过并进行了一些更改,现在代码看起来如下所示,在评论中提到了更改。虽然略有改善,但这并没有解决我的目的。请建议以最快的方式实现此目的。非常感谢。

$(document).ready(function() {
  $('.entry-content').css({'height':'40px','overflow': 'hidden'});


  $('.show-more').on('click',function() {
    if($(this).hasClass('less')){
      $('.entry-content').animate({
      'height': '40px'
      }, 500);
      $(this).html("Show More")
    }
    else{
       $('.entry-content').animate({
      'height': $(".entry-content").get(0).scrollHeight
      }, 500);
      $(this).html("Show Less")
    }
    $(this).toggleClass('less');
  });

});

0 个答案:

没有答案