Python 基于行值将单元格从一个数据帧覆盖到另一个数据帧

Python 基于行值将单元格从一个数据帧覆盖到另一个数据帧,python,pandas,dataframe,merge,Python,Pandas,Dataframe,Merge,我有两个数据集(空白和填充),如下所示,我需要将信息从filled复制到blank blank.head() | Student name | Student number | Mark | Grade | Marked by | Notes | |-------------- |---------------- |-------- |-------- |----------- |-------- | | John

我有两个数据集(空白和填充),如下所示,我需要将信息从
filled
复制到
blank

blank.head()
| Student name  | Student number    | Mark      | Grade     | Marked by     | Notes     |
|-------------- |----------------   |--------   |--------   |-----------    |--------   |
| John          |16                 | NaN       | NaN       | NaN           | NaN   |
| Mary          |19                 | NaN       | NaN       | NaN           | NaN   |
| Colm          |17                 | NaN       | NaN       | NaN           | NaN   |
| Ellen         |20                 | NaN       | NaN       | NaN           | NaN   |
| Fionna        |21                 | NaN       | NaN       | NaN           | NaN   |

filled.head()

| Student name  | Student number    | Mark  | Grade     | Marked by     | Notes                 |
|-------------- |----------------   |------ |-------    |-----------    |--------------------   |
| Tara          | 31                | 71    | B1        | JL            |        Good           |
| Leah          | 40                | 54    | C2        | CL            | Needs more dragons    |
| john          | 16                | 53    | C2        | MG            |        Good           |
| Aisling       | 200               | 60    | B3        | MOB           |    keep working       |
| Adam          | 88                | 74    | B1        | KOM           |  don't forget apa     |

blank是我的主要文档,包含我想要维护的顺序,filled包含为每个学生填写的分数和其他信息,但它与df1的顺序不同


我需要将“Mark”、“Grade”、“Marked by”和“Notes”列从df2复制到df1,保持df1的索引完整,并为每个学生复制正确的信息。

我的第一个想法是使用学生编号作为两个数据帧的索引(我猜这些是唯一的数字),然后像这样复制:

blank.set_index('student number')
filled.set_index('student number')

list = ['Mark', 'Grade', 'Marked by', 'Notes'] 
blank[list] = filled[list]

…不确定这是否适用于您,但…

编辑:创建了与问题中完全相同的填充和空白dfs,因为在我之前代码的注释中提到了一个关键错误

输入:

blank= pd.DataFrame({'Student name' : ['John','Mary','Colm','Ellen','Fionna'], "Student number": [16,19,17,20,21], 'Mark' : [np.NaN,np.NaN,np.NaN,np.NaN,np.NaN],'Grade' : [np.NaN,np.NaN,np.NaN,np.NaN,np.NaN], 'Marked by' : [np.NaN,np.NaN,np.NaN,np.NaN,np.NaN], 'Notes' : [np.NaN,np.NaN,np.NaN,np.NaN,np.NaN]})
filled= pd.DataFrame({'Student name' : ['Tara','Leah','john','Aisling','Adam'], "Student number": [31,40,16,200,88], 'Mark' : [71,54,53,60,74],'Grade' : ['B1','C2','C2','B3','B1'], 'Marked by' : ['JL','CL','MG','MOB','KOM'], 'Notes' : ['Good','Needs more dragons','Good','keep working','dont forget apa']})
空白:

  Student name  Student number  Mark Grade Marked by Notes
0         John              16  53.0    C2        MG  Good
1         Mary              19   NaN   NaN       NaN   NaN
2         Colm              17   NaN   NaN       NaN   NaN
3        Ellen              20   NaN   NaN       NaN   NaN
4       Fionna              21   NaN   NaN       NaN   NaN
填写:

  Student name  Student number  Mark Grade Marked by               Notes
0         Tara              31    71    B1        JL                Good
1         Leah              40    54    C2        CL  Needs more dragons
2         john              16    53    C2        MG                Good
3      Aisling             200    60    B3       MOB        keep working
4         Adam              88    74    B1       KOM     dont forget apa
假设“学生编号”是两个数据帧的公用键。代码如下:

blank[['Mark','Grade','Marked by','Notes']] = blank.merge(filled,on='Student number')[['Mark_y', 'Grade_y','Marked by_y','Notes_y']]
输出:

  Student name  Student number  Mark Grade Marked by Notes
0         John              16  53.0    C2        MG  Good
1         Mary              19   NaN   NaN       NaN   NaN
2         Colm              17   NaN   NaN       NaN   NaN
3        Ellen              20   NaN   NaN       NaN   NaN
4       Fionna              21   NaN   NaN       NaN   NaN

由于某种原因,我得到了一个关键错误,但我知道你要去哪里,谢谢,我会努力让它工作。酷。。我只从你们的数据框中取了几个样本,自己做了一些。因此,请仔细检查我的钥匙是否与你的钥匙拼写错误。请同时查看钥匙周围的双括号,这可能会导致钥匙错误
[['Mark'、'Grade'、'Notes']]
使用iloc可以修复吗?我想不会吧。。你能在问题中给出df的定义吗。。很难从df.head()复制