即时通讯对熊猫来说很新,想知道是否有人可以帮助下面的;我试图用熊猫来逐行循环一个数据帧,并为每一行我想比较该行到另一个数据帧(这大致是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')))))))
希望以上是足够的信息,任何帮助将不胜感激。
感谢,
请检查[如何制作好可重复使用的熊猫示例](http://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples),并尝试创建[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)与期望的输出。 – jezrael