2016-12-05 79 views
0

即时通讯对熊猫来说很新,想知道是否有人可以帮助下面的;我试图用熊猫来逐行循环一个数据帧,并为每一行我想比较该行到另一个数据帧(这大致是7)的每一行。大熊猫回路更换

数据帧是相当大的(从5月到10月,索引是10分钟频率),并且嵌套for循环需要一个运行时间(大约20分钟);

frame['Group1 ON With Exception'] = '' 
    for i in range(len(frame)): 
     for j in range(len(grp1_extpn_tbl)): 
      if ((frame.ix[i,'T01\n(kWh) ':'T22\n(kWh) ']>1) == (grp1_extpn_tbl.loc[j]>0)).all():  
       frame.ix[i,'Group1 ON With Exception'] = '' 
       break 
      else:    
       frame.ix[i,'Group1 ON With Exception'] = 'NOT VALID GROUP1 DATA' 

显然与大熊猫的关键是要避免循环,所以我想出了使用嵌套np.where的,这大大加快东西(像3mins)。问题是它看起来相当麻烦的代码块,我想知道是否有另一种选择,或者甚至压缩这段代码比它更多? ;

frame['Group1 ON With Exception'] = '' 
    frame['Group1 ON With Exception'] = np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[0] > 0)).all(), axis=1),'', 
             np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[1] > 0)).all(), axis=1),'', 
             np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[2] > 0)).all(), axis=1),'', 
             np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[3] > 0)).all(), axis=1),'', 
             np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[4] > 0)).all(), axis=1),'', 
             np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[5] > 0)).all(), axis=1),'', 
             np.where((frame.loc[:,'T01\n(kWh) ':'T22\n(kWh) ']).apply(lambda x: ((x>1) == (grp1_extpn_tbl.loc[6] > 0)).all(), axis=1),'','NOT VALID GROUP1 DATA'))))))) 

希望以上是足够的信息,任何帮助将不胜感激。

感谢,

+1

请检查[如何制作好可重复使用的熊猫示例](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples),并尝试创建[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)与期望的输出。 – jezrael

回答

0

而不是使用我的,J超过数据帧运行,使用iterrows()代替。

for index, row in df1.iterrows(): 
    if row['column'] in df2['column_to_compare_to']: 
     do_something() 
    else: 
     do_something_else() 

或者,为什么不循环通过len 7的小数据框并从大数据框中选择?如果选择变为空,则执行一些操作,如果select返回结果,则执行相关操作。希望有所帮助!

+0

非常感谢您回复,我们会为您提供帮助,让您知道! –