Попытка вернуть значения путем сравнения двух столбцов из двух разных наборов данных

0

Вопрос

У меня есть два набора данных для гоночного картинга с 9 столбцами:

df1:

df1 dataset

df2: df2 dataset

Я пытаюсь настроить несколько условий, при которых сравниваются два набора данных, и пытаюсь вывести значение True или false, если условия удовлетворяют после сравнения. условия таковы:

  1. начало гонки (df1)
  2. race_end (df1) >= race_end(df2)
  3. safety_start(df1)
  4. safety_end (df1) >= safety_end (df2)
  5. начальный фронт (df1)
  6. starting_back (df1)
  7. питстоп (df1) >= питстоп (df2)
  8. no_pitstop (df1) >= no_pitstop (df2)
  9. статус (df1) = статус (df2).

во-первых, я попробовал это:

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')

но я получил ошибку, сказав:

ValueError: Can only compare identically-labeled Series objects

Правильно ли я это делаю? Я пытался найти альтернативные решения, но не нашел ничего подходящего для того, что я пытаюсь сделать? Может ли кто-нибудь сказать мне, правильна ли выбранная мной процедура? Спасибо

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

Лучший ответ

0

Эта ошибка возникает, когда вы пытаетесь сравнить два кадра данных pandas, и либо метки индексов, либо метки столбцов не полностью совпадают, либо они имеют другое измерение.

Вы можете усечь кадры данных перед функцией where с помощью оператора 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

На других языках

Эта страница на других языках

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