Próba zwrócenia wartości poprzez porównanie dwóch kolumn z dwóch różnych zestawów danych

0

Pytanie

Mam dwa zestawy danych dla wyścigów gokartów z 9 kolumn:

df1:

df1 dataset

df2: df2 dataset

Próbuję skonfigurować kilka warunków, w których porównywane są dwa zestawy danych, i staram się czerpać wartość True lub false, jeżeli spełniają warunki po porównania. warunki są następujące:

  1. początek wyścigu (df1)
  2. race_end (df1) >= race_end(df2)
  3. safety_start(df1)
  4. safety_end (df1) >= safety_end (df2)
  5. główny front (df1)
  6. starting_back (df1)
  7. питстоп (df1) >= питстоп (df2)
  8. no_pitstop (df1) >= no_pitstop (df2)
  9. status (df1) = status (df2).

po pierwsze, próbowałem to:

import numpy as np
df1['race_start_final'] = np.where(df1.race_start <= df2.race_start, 'True', 'False')
df1['race_end_final'] = np.where(df1.race_end >= df2.race_end, 'True', 'False')
df1['safety_start_final'] = np.where(df1.safety_start <= df2.safety_start, 'True', 'False')
df1['safety_end_final'] = np.where(df1.safety_end >= df2.safety_end, 'True', 'False')
df1['starting_front_final'] = np.where(df1.starting_front <= df2.starting_front, 'True', 'False')
df1['starting_back_final'] = np.where(df1.starting_back <= df2.starting_back, 'True', 'False')
df1['pitstop_final'] = np.where(df1.pitstop >= df2.pitstop, 'True', 'False')
df1['pitstop_final'] = np.where(df1.pitstop >= df2.pitstop, 'True', 'False')
df1['status_final'] = np.where(df1.status == df2.status, 'True', 'False')

ale dostałem błąd, mówiąc:

ValueError: Can only compare identically-labeled Series objects

Czy ja to robię? Próbowałem znaleźć alternatywne rozwiązania, ale nie znalazłem nic odpowiedniego dla tego, że staram się zrobić? Czy może mi ktoś powiedzieć, poprawna czy wybrana przeze mnie procedura? Dziękuję

dataframe dataset pandas python
2021-11-24 03:02:00
1

Najlepsza odpowiedź

0

Ten błąd występuje, gdy próbujesz porównać dwa ujęcia danych pandas, i albo znaczniki indeksu, lub etykiety kolumn nie są całkowicie identyczne, albo mają inny wymiar.

Można obciąć ramki danych przed funkcją where za pomocą instrukcji if-else:

df1 = pd.DataFrame([
    [10.5, 8.5],
    [8.5, 8.5]],
    columns=['race_start','race_end'])
df2 = pd.DataFrame([
    [9.8, 9.8],
    [9.8, 9.8],
    [8.5, 8.5]],
    columns=['race_start','race_end'])

if len(df1) > len(df2):
    df1=df1.tail(df2.shape[0]).reset_index()
else:
    df2=df2.tail(df1.shape[0]).reset_index()
    
df1['race_start_final'] = np.where(df1.race_start <= df2.race_start, 'True', 'False')
2021-11-25 15:32:27

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................