Pandas объединяет множество строк одного фрейма данных с меньшим количеством строк второго фрейма данных

Есть ли простой способ объединить два кадра данных, чтобы df2 добавил все свои строки с соответствующими значениями «on» в качестве новых столбцов в df1? Также открыты для других методов объединения данных.

например Сопоставление кода предложения курса и идентификатора пользователя

df1:
Код предложения курса ID пользователя 001 1 001 2
df2:
Код предложения курса ID пользователя Назначение оценка% 001 1 А01 65 001 1 А02 85 001 1 А03 95 001 1 А04 64 001 2 А01 87 001 2 А02 86 001 2 А03 82 001 2 А04 90

Я пробовал pd.merge(df1, df2, on=['User Id', 'Course Offering Code']) и надеялся на следующее:

желательный_df

Код предложения курса ID пользователя Назначение_x оценка%_x Назначение_y оценка%_y Assignment_z оценка%_z Назначение_а оценка отлично 001 1 А01 65 А02 85 А03 95 А04 64 001 2 А01 87 А02 86 А03 82 А04 90
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать это с помощью pandas.DataFrame.pivot:

def flatten_cols(df):
    df.columns = ['_'.join(map(str, x)) for x in df.columns]
    df = df[sorted(df.columns, key=lambda x: int(x.split("_")[-1]))]
    return df

out = (
        df1
          .merge(df2, on=["Course Offering Code", "User Id"], how = "left")
          .assign(idx=lambda x: x.groupby(['Course Offering Code', 'User Id']).cumcount()+1)
          .pivot(index= ["Course Offering Code", "User Id"],
                 columns= "idx", values=["Assignment", "grade%"])
          .pipe(flatten_cols)
          .reset_index()
      )

# Выход :

print(out.to_string())

  Course Offering Code  User Id Assignment_1 grade%_1 Assignment_2 grade%_2 Assignment_3 grade%_3 Assignment_4 grade%_4
0                  001        1          A01       65          A02       85          A03       95          A04       64
1                  001        2          A01       87          A02       86          A03       82          A04       90

Другие вопросы по теме