Pandas: объединить 2 фрейма данных на основе значений столбца; для нескольких строк, содержащих одинаковые значения столбцов, добавьте их в разные столбцы

#python #pandas

#python #pandas

Вопрос:

У меня есть два фрейма данных, dataframe1 и dataframe2. Они оба используют одни и те же данные в определенном столбце для обоих, давайте назовем этот столбец ‘share1’ и ‘share2’ для dataframe1 и dataframe2 соответственно.

Проблема в том, что бывают случаи, когда в dataframe1 есть только одна строка в ‘share1’ с определенным значением (назовем ее ‘c34z’), но в dataframe2 есть несколько строк со значением ‘c34z’ в столбце ‘share2’.

Что я хотел бы сделать, так это в новом объединенном фрейме данных, когда появляются новые значения, я просто хотел бы поместить их в новый столбец.

Таким образом, количество столбцов в новом фрейме данных будет максимальным количеством дубликатов для определенного значения в ‘share2’ . А для строк, где в ‘share2’ было только уникальное значение, остальные добавленные столбцы будут пустыми для этой строки.

Ответ №1:

Затем вы можете cumcount создать дополнительный ключ pivot df2

 newdf2=df2.assign(key=df2.groupby('share2').cumcount(),v=df2.share2).pivot_table(index='share2',columns='key',values='v',aggfunc='first')
  

После этого я использую .loc или reindex concat df2 для df1

 df2=df2.reindex(df1.share1)

df2.index=df1.index
yourdf=pd.concat([df1,df2],axis=1)
  

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

1. Я получаю TypeError: 'method' object is not subscriptable сообщение об ошибке при запуске 2-й строки df2=df2.reindex[df1.share1]

2. @SantoshGupta7 это лучшее, что я могу сделать, основываясь на моем воображении …… поскольку вы не предоставили образец данных также для исправления ошибки change []to ()

3. предполагается, что df2 будет newdf2 в последних трех строках?

Ответ №2:

Загрузка данных:

 import pandas as pd
df1 = {'key': ['c34z', 'c34z_2'], 'value': ['x', 'y']}
df2 = {'key': ['c34z', 'c34z_2', 'c34z_2'], 'value': ['c34z_value', 'c34z_2_value', 'c34z_2_value']}
df1 = pd.DataFrame(df1)
df2 = pd.DataFrame(df2)
  

Преобразование df2 путем группировки и поворота

 df2_pivot = df2.groupby('key')['value'].apply(lambda df: df.reset_index(drop=True)).unstack().reset_index()
  

объединить df1 и df2_pivot

 df_merged = pd.merge(df1, df2_pivot, on='key')

  

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

1. есть ли способ расширить это для столбцов с несколькими значениями?

2. @SantoshGupta7 не могли бы вы предоставить образцы данных