#python #pandas
#python #pandas
Вопрос:
У меня есть 2 отдельных фрейма данных pandas, один из которых отслеживает, свободна платформа железнодорожной станции или нет, а другой, который отслеживает движение поездов (обратите внимание, я только на стадии проверки концепции, я ценю, что мой код не является аккуратным).
Приведенный ниже код:
L = []
M = []
x = 0
for i in range(0,k*2):
L.append(0)
M.append(x)
if (i == k):
x = 1
list_of_tuples = list(zip(M, L))
blocks_df = pd.DataFrame(list_of_tuples, columns = ['Direction', 'BlockTaken'])
L = ["London Depot", "London Platform", "Birmingham Platform", "Crossover"]
M = [0,0,0,0]
list_of_tuples = list(zip(L, M))
stations_control = pd.DataFrame(list_of_tuples, columns = ['Location', 'BlockTaken'])
for i in range (0,3600):
if (i%300==0): #Every 5 minutes, a new train enters service
print("Train " str(TrainNumber) " leaving depot for " str(train_df.loc[train_df['Train_Number'] == TrainNumber, 'Start_Station'].iloc[0]) " at " str(t.time()) )
train_df.loc[train_df['Train_Number'] == TrainNumber, 'Dep'] = 'N'
train_df.loc[train_df['Train_Number'] == TrainNumber, 'Dep_Time'] = t.time()
train_df.loc[train_df['Train_Number'] == TrainNumber, 'From'] = L[0]
train_df.loc[train_df['Train_Number'] == TrainNumber, 'To'] = L[1]
if(stations_control[train_df.loc[train_df['Train_Number'] == TrainNumber, 'To']]['BlockTaken'] ==0):
print("Platform is free!!!")
t = t datetime.timedelta(0,300)
#TrainNumber =1
Я знаю, что неправильно выполняю оператор if в 4 строках от конца, но я не могу понять, как это сделать правильно. Я хочу проверить, куда направляется поезд, и свободна ли платформа, распечатать. Какой здесь правильный синтаксис?
Комментарии:
1.
if stations _control.loc[L[1], 'BlockTaken'] == 0:
?… какое исключение возникает? Вам нужен пробел между if и открытой круглой скобкой?2. Привет, Ричи, спасибо за твою помощь. Это выдает ошибку: KeyError: ‘Лондонская платформа’
Ответ №1:
Я думаю, что это
b = train_df.loc[train_df['Train_Number'] == TrainNumber, 'To'].iloc[0]
if(stations_control.loc[stations_control['Location']==b]['BlockTaken'] == 0):
Комментарии:
1. Привет, спасибо за вашу помощь. Я получаю сообщение об ошибке «Значение истинности ряда неоднозначно. Используйте a.empty, a.bool(), a.item(), a.any() или a.all().»
2.
stations_control.loc[stations_control['Location']==b]['BlockTaken'].all() == 0
или « stations_control.loc[stations_control[‘Местоположение’]==b] [‘Заблокирован’][0] == 0 «3. Можете ли вы показать мне результат
python stations_control.loc[stations_control['Location']==b]['BlockTaken']
4. Имя: BlockTaken, dtype: int64
5. и выходные данные train_df.loc[train_df[‘Train_Number’] == TrainNumber, ‘To’]?
Ответ №2:
Отвечая на мой собственный вопрос здесь. Спасибо за помощь, ребята.
if(stations_control.loc[stations_control['Location']==b].BlockTaken.iloc[0]== 0):
print("Platform is free!!!")