#python #pandas #dataframe #pandas-groupby
#python #панды #фрейм данных #pandas-groupby
Вопрос:
Первый фрейм данных:
Subject Branch Test1 Test2 Test3
DS IT 45 43 44
CE 40 45 39
JAVA MCA 43 34 39
IT 38 43 44
CE 34 43 37
Python MCA 35 49 43
Второй фрейм данных:
Subject Final_Marks Faculty
DS 45 Dr. Kumar
40 Dr. Mamtha
JAVA 43 Prof. Sagar
38 Dr. Chethana
34 Prof. Smitha
43 Dr. Romin
Python 35 Dr. Rakesh
46 Prof.Chethan
Я хочу объединить эти два фрейма данных в «теме».
Ожидаемый результат:
Subject Branch Test1 Test2 Test3 Final_Marks Faculty
DS IT 45 43 44 45 Dr.Kumar
CE 40 45 39 40 Dr.Mamtha
JAVA MCA 43 34 39 43 Prof.Sagar
IT 38 43 44 38 Dr.Chethana
CE 34 43 37 34 Prof.Smitha
43 Dr.Romin
Python MCA 35 49 43 35 Dr.Rakesh
46 Prof.Chethan
Я пробовал:
f = pd.merge(df1,df2,on='Subject', how='left')
Но второй фрейм данных повторяется для каждой строки 1-го фрейма данных. Он не дает ожидаемого результата.
Комментарии:
1. Во втором фрейме данных нет информации о
Branch
?2. У вас недостаточно данных для слияния.
3. @jezrael 1-й фрейм данных сгруппирован по теме и ветке, а во 2-м фрейме данных нет информации о ветке
4. Или вы уверены, что первое, второе, третье значения из
Subject
одинаковы для обоих фреймов данных? Никогда некоторые строки не изменяются?
Ответ №1:
Если вы уверены, что первые, вторые, третьи … строки по Subject
одинаковы для обоих фреймов данных, можно использовать GroupBy.cumcount
для счетчика и использовать его для слияния:
df1['g'] = df1.groupby('Subject').cumcount()
df2['g'] = df2.groupby('Subject').cumcount()
f = pd.merge(df1,df2,on=['Subject', 'g'], how='left')
При необходимости все значения нуждаются во внешнем соединении:
f = pd.merge(df1,df2,on=['Subject', 'g'], how='outer')
Комментарии:
1. В моем случае у меня переменное количество строк для каждой группы «subject». В этом случае cumcount() не будет работать. тогда каким должен быть подход к объединению обоих фреймов данных.
2. @codewarrior — да, если невозможно использовать вспомогательный столбец
g
, тогда действительно непросто получить ответ, потому что при использованииmerge
Subject
столбцами только дублируется вывод, потому что в обоих есть дубликаты. Здесь лучше всего, если возможно, объединить по нескольким столбцам