2017-01-13 47 views
-1
parts_list = imp_parts_df['Parts'].tolist() 
sub_week_list = ['2016-12-11', '2016-12-04', '2016-11-27', '2016-11-20', '2016-11-13'] 
i = 0 
start = DT.datetime.now() 
for p in parts_list: 
     for thisdate in sub_week_list: 
      thisweek_start = pd.to_datetime(thisdate, format='%Y-%m-%d') #'2016/12/11' 
      thisweek_end = thisweek_start + DT.timedelta(days=7) # add 7 days to the week date 

      val_shipped = len(shipment_df[(shipment_df['loc'] == 'USW1') & (shipment_df['part'] == str(p)) & (shipment_df['shipped_date'] >= thisweek_start) & (shipment_df['shipped_date'] < thisweek_end)]) 

print (DT.datetime.now() - start).total_seconds() 

shipment_df大約有35000條記錄pythhon數據幀過濾條件:任何更快的方法

PARTLIST具有436個零件

sub_week_list具有5日在其

花了整體438.13秒到運行此代碼

有沒有更快的方法來做到這一點

+2

更快的方式做什麼?您將一個整數分配給436次相同的變量。 – piRSquared

+0

請參閱編輯後的版本.....我的問題是爲什麼它需要這麼多時間來過濾條件運行....通常循環運行良好,但是當我把這個過濾標準的數據幀...它的採取時間...有更快的過濾方式 – Santor

回答

0
parts_list = imp_parts_df['Parts'].astype(str).tolist() 
i = 0 
start = DT.datetime.now() 
for p in parts_list: 

    q = 'loc == "xxx" & part == @p & "2016-11-20" <= shipped_date < "2016-11-27"' 
    val_shipped = len(shipment_df.query(q)) 

print (DT.datetime.now() - start).total_seconds() 
+0

感謝您的回覆..我用我的代碼「查詢」過濾方法..它採取** 230.078 **秒...這是很好的。但仍然不能認爲它更多地考慮簡單的代碼 – Santor