pythhon数据帧过滤条件:任何更快的方式

时间:2017-01-13 12:25:29

标签: python pandas filter

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条记录

partlist有436个部分

sub_week_list中有5个日期

总体 438.13 秒来运行此代码

有没有更快的方法呢

1 个答案:

答案 0 :(得分: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()