Snaží sa vrátiť hodnôt porovnaním dvoch stĺpcov z dvoch rôznych súborov údajov

0

Otázka

Mám dve kart závodná súbormi, s 9 stĺpcov:

df1:

df1 dataset

df2: df2 dataset

Snažím sa nastaviť viacero podmienok, kde sa dva súbory dát sú v porovnaní a snaží sa vytlačiť True alebo false, ak sú podmienky na uspokojovanie po vyrovnaní. podmienky sú:

  1. race_start (df1) <= race_start (df2)
  2. race_end (df1) >= race_end(df2)
  3. safety_start(df1) <= safety_start (df2)
  4. safety_end (df1) >= safety_end (df2)
  5. starting_front (df1) <= starting_front (df2)
  6. starting_back (df1) <= starting_back (df2)
  7. pitstop (df1) >= pitstop (df2)
  8. no_pitstop (df1) >= no_pitstop (df2)
  9. stav (df1) = stav (df2).

najprv som sa snažil tento:

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 dostal som chybu hovorí:

ValueError: Can only compare identically-labeled Series objects

Robím to správne? Snažil som sa nájsť alternatívne riešenia, ale nenašiel žiadne relevantné pre to, čo som sa snaží robiť? Môže mi niekto povedať, či postup som si vybrali je správna cesta? Vďaka

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

Najlepšiu odpoveď

0

Táto chyba sa vyskytuje pri pokuse porovnať dve pandy DataFrames a buď index štítky alebo stĺpec etikety nemajú dokonale ladí, alebo to má iný rozmer.

Môžete orezať DataFrames pred, kde funkcia s ak-iný výrok:

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

V iných jazykoch

Táto stránka je v iných jazykoch

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