Нужна помощь в оптимизации моего кода циклов for ниже в python - PullRequest
0 голосов
/ 05 мая 2020
def data_fixing(dat, flags):
    dat['created_at'] = pd.to_datetime(dat['created_at'], dayfirst=True)
    dat.sort_values(['car_license_number','created_at','odometer_reading'], axis=0,ascending=True, inplace=True)
    dat.replace([np.inf, -np.inf], np.nan,inplace=True)
    dat.fillna(0, inplace=True)
    from progressbar import ProgressBar
    pbar = ProgressBar()
    dat.sort_values(['car_license_number','created_at','odometer_reading'], axis=0,ascending=True, inplace=True)
    groups = dat.groupby(['car_license_number'])
    final = pd.DataFrame()
    for lice,car in pbar(groups):
        p=pd.DataFrame(car)
        p.reset_index(drop=True, inplace=True)
        for flag in flags:
            odo_flag_last=0
            day_diff_repair=0
            day_diff=car['created_at'][0]
            flag_odo=0
            b=[]
            c=[]
            for i in range(len(p)):
                day_diff_repair=(p.loc[i,'created_at']-day_diff).days
                odo_flag_last=p.loc[i,'odometer_reading']-flag_odo
                if(p.loc[i,str(flag)]==1):
                    flag_odo=p.loc[i,'odometer_reading']
                    day_diff=p.loc[i,'created_at']
                b.append(int(odo_flag_last))
                c.append(int(day_diff_repair))
            p['kms_frm_'+str(flag)]=b
            p['day_diff_'+str(flag)]=c
        final = pd.concat([final,p],axis =0)
    return final
...