#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 не могли бы вы предоставить образцы данных