我想在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
如果您有一个解决方案,该解决方案将首先复制未唯一标识的行,然后删除第二行/以所需的方式创建最后一列,那也很好。 / p>
一些帮助会很棒!谢谢!
答案 0 :(得分:1)
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
答案 1 :(得分: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 ]