Объединить две таблицы и создать столбец на основе сходства между двумя столбцами

#python #python-3.x #pandas

#python #python-3.x #pandas

Вопрос:

У меня есть две таблицы A / B. Я хочу объединить таблицу слияния A в B при создании цикла.

Ввод

 Table A:            Table B:

name      year      name     subject group
James     one       Jenny    Physics
Jackson   one       Jackson  Maths
Jenny     two       Jenny    PE
Himeth    three     Himeth   Chemistry
Carlos    three     Carlos   Physics
Mendy     one       Mendy    German
James     two       James    Physics
Himeth    one       Himeth   Chemistry
 

Вывод

 Name    subject    group   year_one year_two year_three
Jenny   PE         Yellow           two     
Jackson Maths      Green   one              
James   Physics    Yellow  one      two     
Himeth  Chemistry  Yellow  one                     three
Carlos  Physics    Green                           three
Mendy   German     Yellow  one      
 

Я хочу добавить столбец year из таблицы A, но создать столбцы для year (один, два, три), поскольку есть дубликаты.

years = [«один», «два», «три»]

 for i in years: 
    df.to_csv("student.csv")
    dfs = pd.merge(df,students,
                on = "Name",
                how = "left")
    dfs[i] = i
    dfs.to_csv("class_setup.csv")
 

Я не уверен, как выполнить цикл для слияния и создать новый столбец.

Ответ №1:

Используйте DataFrame.pivot с DataFrame.join :

 df = df2.join(df1.pivot('name','year','year'), on='name').fillna('')
print (df)
      name  one  three  two
0    Jenny              two
1  Jackson  one            
2    Jenny              two
3   Himeth  one  three     
4   Carlos       three     
5    Mendy  one            
6    James  one         two
7   Himeth  one  three     
 

Если порядок важен:

 years = ["one", "two", "three"]
df = df2.join(df1.pivot('name','year','year').reindex(years, axis=1), on='name').fillna('')
print (df)
      name  one  two  three
0    Jenny       two       
1  Jackson  one            
2    Jenny       two       
3   Himeth  one       three
4   Carlos            three
5    Mendy  one            
6    James  one  two       
7   Himeth  one       three
 

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

1. В моей таблице A 200 имен, а в таблице B 500 имен. Я должен слева соединить B с A перед запуском вашего кода, в котором я еще не уверен. Дубликаты вызывают проблему с pd.merge

2. @james — Нет, не объединяйте перед моим кодом. join В моем решении используется For merge

3. pivot не работает, потому что в таблице A есть дубликаты имен с разными годами.

4. @james — так это означает, что данные отличаются, как в вопросе? Можете ли вы изменить данные на pivot сбой и добавить ожидаемый результат?

5. обновил мою выходную таблицу, чтобы было понятно. В таблице B есть другие столбцы, и я хочу создать три дополнительных столбца (один, два, три) из таблицы A