Как искать одинаковые столбцы из одного фрейма данных в другом фрейме данных pandas python?

#python #pandas #numpy #dataframe #merge

#python #pandas #numpy #фрейм данных #слияние

Вопрос:

У меня есть один фрейм данных, подобный этому,

 tabla_aciertos= {'Numeros_acertados' : [5,5,5,4,4,3,4,2,3,3,1,2,2],'Estrellas_acertadas': [2,1,0,2,1,2,0,2,1,0,2,1,0]}
categorias = [1,2,3,4,5,6,7,8,9,10,11,12,13]
categoria_de_premios = pd.DataFrame (tabla_aciertos,index = [categorias] )
categoria_de_premios
  
    Numeros_acertados  Estrellas_acertadas
1                   5                    2
2                   5                    1
3                   5                    0
4                   4                    2
5                   4                    1
6                   3                    2
7                   4                    0
8                   2                    2
9                   3                    1
10                  3                    0
11                  1                    2
12                  2                    1
13                  2                    0
  

и еще один df :

 sorteos_anteriores.iloc[:,:]

    uno dos tres    cuatro  cinco   Estrella1   Estrella2   bolas_Acertadas estrellas_Acertadas
Fecha                                   
2020-10-13  5   14  38  41  46  1   10  0   1
2020-09-10  11  15  35  41  50  5   8   1   0
2020-06-10  4   21  36  41  47  9   11  0   0
2020-02-10  6   12  15  40  45  3   9   0   0
2020-09-29  4   14  16  41  44  11  12  0   1
... ... ... ... ... ... ... ... ... ...
2004-12-03  15  24  28  44  47  4   5   0   0
2004-05-03  4   7   33  37  39  1   5   0   1
2004-02-27  14  18  19  31  37  4   5   0   0
2004-02-20  7   13  39  47  50  2   5   1   0
2004-02-13  16  29  32  36  41  7   9   0   0
1363 rows × 9 columns
  

Теперь мне нужно видеть, что в каждой строке df «sorteos_anteriores» находится в одной из всех строк из первого df, «tabla_aciertos».

Позвольте мне привести вам один пример,

Inmagine в «sorteos_anteriores» у вас есть в: 2019-11-2 in the column "bolas_Acertadas"= 5 and "estrellas_Acertadas= 1" . Теперь вы переходите к первой таблице «tabla_aciertos» и находите это в (index 2 = "Numeros_acertados" = 5 and Estrellas_acertadas=1) . Вы выиграли второй (индекс = 2) приз класса. Вы должны создать новый столбец «Приз» в «sorteos_anteriores» и в каждой строке написать число from 1 to 13 , если у вас есть какой-то приз 0 or Nan , если у вас его нет.

Я попробовал :

 sorteos_anteriores ['categorias']  = sorteos_anteriores(sorteos_anteriores.loc[:,'bolas_Acertadas':'estrellas_Acertadas'] == tabla_premios.iloc[ : ,0:2])
  

Также с where и merge, но ничего не работает.

Спасибо за вашу помощь.

Благодаря Cuina Max я смог это сделать.

ответ здесь

Комментарии:

1. Почему слияние не сработало? Использование how=outer должно работать, заполняя NAs строками, которые не совпадают categoria_de_premios .

Ответ №1:

 # supposing that the indexes, starting from one, correspond to the the premiums
categoria_de_premios['Categoria'] = df.index

# Merge using pd.merge and the appropriate arguments
sorteos_anteriores = (sorteos_anteriores.merge(
    categoria_de_premios,
    how='outer',
    left_on=['bolas_Acertadas','estrellas_Acertadas'],
    right_on=['Numeros_acertados', 'Estrellas_acertadas']
)).drop(columns=['Numeros_acertados', 'Estrellas_acertadas'])
  

Комментарии:

1. Вы можете использовать .index для преобразования индекса в столбец, если индекс не отсортирован численно.

2. Да, @Ehsan, ты абсолютно прав. Это также проще. Я обновил ответ.

3. Спасибо. Это работает. Хотя единственное, что я изменил, это HOW= «inner». Спасибо.