У меня есть два кадра данных панд, которые я хочу объединить.Фреймы данных имеют разные размеры, поэтому я хочу сохранить только те, которые появляются в df1
- некоторые студенты появляются только в одном из df1
или df2
.
df1
с заголовками ['student', 'week1_count', 'week1_mean', ..., 'week11_count', 'week11_mean']
и инициализируется со всеми ячейками, кроме столбца 'student'
, равными нулю.
df2
имеет заголовки ['student', 'week', 'count', 'mean']
и заполняется соответствующим 'student'
.'week'
- это int между 1-11, а 'count'
и 'mean'
- соответствующие числа с плавающей точкой.
Что я хочу сделать, это для данного учащегося в df1
и df2
, длядля данной недели возьмите соответствующее значение 'count'
и 'mean'
и поместите его в df1
в соответствующем столбце.Например, значение 'week'
1
будет означать, что значение в 'count'
и 'mean'
в df2
будет помещено в 'week1_count'
и 'week1_mean'
соответственно в df1
.
Относительно недель, которые я просматривал range(11)
и создавал подмножество фрейма данных, но задаюсь вопросом, есть ли более быстрый путь.
то есть
df1:
student week1_count week1_mean week2_count week2_mean ...
'0' 0 0 0 0 ...
'2' 0 0 0 0 ...
'3' 0 0 0 0 ...
.
.
.
'500' 0 0 0 0 ...
'541' 0 0 0 0 ...
'542' 0 0 0 0 ...
и
df2:
student week count mean
'0' 1 5 6.5
'1' 1 3 7.0
'2' 1 2 8.2
'2' 2 10 15.1
.
.
.
'500' 2 12 4.3
'540' 4 1 3.0
'542' 1 4 1.2
'542' 2 9 5.2
таким образом, ожидаемый результат
df_result:
student week1_count week1_mean week2_count week2_mean ...
'0' 5 6.5 0 0 ...
'2' 2 8.2 10 15.1 ...
'7' 0 0 0 0 ...
.
.
.
'500' 0 0 12 4.3 ...
'541' 0 0 0 0 ...
'542' 4 1.2 9 5.2 ...
Я пробовал различные процедуры - ни одна из которых не работала, как предполагалось - в пандах, таких как:
- объединение: используя 'leftПрисоединяйтесь, как я хочу формат
df1
.Я попытался переименовать столбцы в df2
, чтобы они соответствовали именам столбцов. - join
- concat
- update: попытался инициализировать все ячейки в
df1
в np.nan
вместо0.0
, а затем используйте df1.update(df2)
(после переименования столбцов в df2
), чтобы обновить все значения nan с помощью требуемого значения. - попытался просто установить значения: то есть что-то вроде
df1[rows_in_both][['week1_count','week1_mean']] = df2[rows_in_both][['count','mean']]
, но это нелибо не работает