即時通訊對熊貓來說很新,想知道是否有人可以幫助下面的;我試圖用熊貓來逐行循環一個數據幀,併爲每一行我想比較該行到另一個數據幀(這大致是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