У меня есть два кадра данных:
df_GB - список учеников и данные учеников для класса
df_EV представляет собой набор ответов на опрос от подгруппы учащихся в классе
import pandas as pd
import numpy as np
# Create the two dataframes
In [82]: gradebook=[['Jim','T'],['Susan','F'],['Bob','F'],['Ellen','T']]
In [83]: df_GB=pd.DataFrame(gradebook,columns=['Name','Attend'])
In [84]: survey=[['Jim',1,3,4,'Awesome'],['Ellen',1,4,3,'Splendid'],['Fred',0,1,2,'Passable']]
In [85]: df_EV=pd.DataFrame(survey,columns=['Name','Q1','Q2','Q3','Comment'])
#Display the two dataframes
In [86]: df_GB
Out[86]:
Name Attend
0 Jim T
1 Susan F
2 Bob F
3 Ellen T
In [87]: df_EV
Out[87]:
Name Q1 Q2 Q3 Comment
0 Jim 1 3 4 Awesome
1 Ellen 1 4 3 Splendid
2 Fred 0 1 2 Passable
Я хочу добавить ответы на опрос для каждого учащегося, указанного в df_EV, в правильные строки в df_GB, чтобы получить следующее:
In [90]: df_result
Out[90]:
Name Attend Q1 Q2 Q3 Comment
0 Jim T 1.0 3.0 4.0 Awesome
1 Susan F NaN NaN NaN NaN
2 Bob F NaN NaN NaN NaN
3 Ellen T 1.0 4.0 3.0 Splendid
4 Fred NaN 0.0 1.0 2.0 Passable
снимок экрана того, как df_GB, df_EV и df_result выглядят как таблицы
Я попытался создать df_result из списка имен в df_GB, затем просмотреть циклы по именам в df_result, найти эти имена в df_EV и «вставить» в данные, используя loc, но это не работает, потому что я я пытаюсь вставить фрейм данных как серию в фрейм данных, и он выдает ошибку «ValueError: Несовместимый индексатор с сериями».
df_result['Name']=pd.DataFrame({'Name' : df_GB['Name']})
i=0
while i<df_result.shape[0]
name=df_result.at[i,'Name']
df_result.loc[i,'Q1':'Comment']=df_EV.loc[lambda df_EV: df_EV['Name']==name,['Q1','Q2','Q3','Comment']]
i +=1
Я уже некоторое время бью себя по клавиатуре, пытаясь понять, как это сделать. Подсказки? Я новичок в python - скачал его вчера после нескольких лет использования Matlab для подобных задач - и это кажется слишком простой вещью, чтобы ее было так трудно понять.
Подобные вопросы, которые я прочитал, казалось, были решены путем добавления строк или столбцов к кадру данных, что, как я думаю, не сработает в этом случае, поскольку списки «Имя» в этих двух кадрах данных не совпадают, если только я не пропускаю очевидный трюк.