import numpy as np import pandas as pd def fun(x): # x=bestchrom stationidwan = pd.read_csv('stationidwan.csv') stationidlst = pd.read_csv('stationidlst.csv') stationidtrip = pd.read_csv('stationidtrip.csv') yanLinks = pd.read_csv('yanLinks.csv') luwang = pd.read_csv('luwang.csv') stationid = stationid.sort_values(by=0) a = max(np.where(stationid[0] < 524000000000)[0]) + 1 b = max(np.where(stationid[0] < 525000000000)[0]) stationid = stationid.iloc[a:b, :] # 路段所属分区赋值 yanLinks.iloc[:, 11] = yanLinks.iloc[:, 11].astype(int) yanLinks.iloc[:, 12] = x[yanLinks.iloc[:, 11].values] stationid.iloc[:, 6] = stationid.iloc[:, 6].astype(int) stationid.iloc[:, 8] = yanLinks.iloc[stationid.iloc[:, 6].values, 12].values # 公交站点OD检测 route = np.unique(np.floor(stationid.iloc[:, 0] / 1000000)) ss = [] for i in range(len(route)): vehrecord = stationid.loc[np.floor(stationid.iloc[:, 0] / 1000000) == route[i], :] if len(vehrecord) > 10: vp = np.abs((np.arange(1, len(vehrecord) + 1)[:, np.newaxis] - np.flipud( np.arange(1, len(vehrecord) + 1)[:, np.newaxis]) + 0.5) * vehrecord.iloc[:, 7].values) y = np.argmin(vp, axis=0) for j in range(len(vehrecord)): n = 1 if j != len(vehrecord) - 1: # 判断后续区域 while vehrecord.iloc[j, 8] == vehrecord.iloc[j + n, 8]: if j + n == y or j + n == len(vehrecord) - 1: break if np.abs(vehrecord.iloc[j + n, 0] - vehrecord.iloc[j + n + 1, 0]) > 500000: break n = n + 1 vehrecord.iloc[j, 9] = vehrecord.iloc[j + n, 8] else: vehrecord.iloc[j, 9] = vehrecord.iloc[-1, 8] n = 1 if j != 0: # 判断前续区域 while vehrecord.iloc[j, 8] == vehrecord.iloc[j - n, 8]: if j - n == y - 1 or j - n == 0: break if np.abs(vehrecord.iloc[j - n, 0] - vehrecord.iloc[j - n - 1, 0]) > 500000: break n = n + 1 vehrecord.iloc[j, 10] = vehrecord.iloc[j - n, 8] else: vehrecord.iloc[j, 10] = vehrecord.iloc[0, 8] ss.append(vehrecord) ss = pd.concat(ss)