2

我想在 python 中加入两个数据框。左边的数据框有几列,右边的只有三列。我想使用它们中的两个来执行左连接,但是我不想复制无法唯一标识的行,而是想在左数据框的第三列中添加一个附加值。我认为以下示例将显示我正在寻找的内容:

左侧数据集如下所示:

 School  | Class | participation 
   ABC   |  1a   |  1  
   ABC   |  2a   |  0  
   CDE   |  1b   |  1  

正确的数据集如下所示:

 School  | Class | responsible 
   ABC   |  1a   |  Max    
   ABC   |  1a   |  James  
   ABC   |  2a   |  Julia  
   CDE   |  1b   |  Max    

如您所见,Max 和 James 都负责同一所学校和同一班级,因此输出应如下所示:

 School  | Class | participation | responsible 
   ABC   |  1a   |      1        |   Max&James    
   ABC   |  2a   |      0        |   Julia     
   CDE   |  1b   |      1        |   Max       

如果您有一个解决方案可以首先复制未唯一标识的行并以所需方式删除第二行/创建最后一列,那也可以。

一些帮助会很棒!谢谢!

4

2 回答 2

2
In [235]: d1.merge(
     ...:     d2.groupby(["School", "Class"])
     ...:     ["responsible"]
     ...:     .apply(lambda x: x.str.cat(sep=" & "))
     ...:     .reset_index())
Out[235]:
  School Class  participation  responsible
0    ABC    1a              1  Max & James
1    ABC    2a              0        Julia
2    CDE    1b              1          Max
于 2019-07-15T20:29:37.180 回答
0

这有效,请注意变量名:

df1.set_index([' School  ',' Class ']).reset_index().assign(responsible=df2.groupby([' School  ',' Class '])[' responsible '].apply(list).values)

输出:

   School     Class          participation               responsible
0     ABC       1a                         1  [  Max    ,   James  ]
1     ABC       2a                         0                 [  Max]
2     CDE       1b                         1             [  Julia  ]
于 2019-07-15T18:34:04.820 回答