Проверьте, равны ли значения двух разных полей фрейма данных pandas

#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!!!")