2016-12-05 107 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

非常感謝您回覆,我們會爲您提供幫助,讓您知道! –