59 lines
2.5 KiB
Python
59 lines
2.5 KiB
Python
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)
|
|
|