如何在两个DataFrame下合并不同的行数,但在Pandas中有一个公共列?
DataFrame1:
CName PName Col1 Col2
A1 XX1 34 22
A2 XX2 23 44
A1 XX3 11 12
A2 XX4 23 43
A1 XX5 42 76
A3 XX6 15 56
A4 XX7 33 45
A5 XX8 223 87
A5 XX9 12 56
A5 XX10 87 34
A5 XX11 6 23
A4 XX12 55 33
DataFrame2:
CName read unread
A1 12 43
A2 24 78
A3 1 65
A4 2 16
A5 5 6
以便生成的DataFrame必须如下所示:
CName PName Col1 Col2 SumOfReadAndUnRead
A1 XX1 34 22 55
A2 XX2 23 44 102
A1 XX3 11 12 55
A2 XX4 23 43 102
A1 XX5 42 76 55
A3 XX6 15 56 66
A4 XX7 33 45 18
A5 XX8 223 87 11
A5 XX9 12 56 11
A5 XX10 87 34 11
A5 XX11 6 23 11
A4 XX12 55 33 18
答案 0 :(得分:4)
看起来'CName'
在第二个数据帧中是唯一的。我使用map
。它应该更快。
df1.assign(
SumOfReadAndUnRead=df1.CName.map(df2.set_index('CName').sum(1))
)
CName PName Col1 Col2 SumOfReadAndUnRead
0 A1 XX1 34 22 55
1 A2 XX2 23 44 102
2 A1 XX3 11 12 55
3 A2 XX4 23 43 102
4 A1 XX5 42 76 55
5 A3 XX6 15 56 66
6 A4 XX7 33 45 18
7 A5 XX8 223 87 11
8 A5 XX9 12 56 11
9 A5 XX10 87 34 11
10 A5 XX11 6 23 11
11 A4 XX12 55 33 18
答案 1 :(得分:4)
将df2
中的已读和未读列相加,然后将其加入df1
。
>>> df1.join(df2.set_index('CName').sum(axis=1).to_frame('SumOfReadAndUnRead'), on='CName')
CName PName Col1 Col2 SumOfReadAndUnRead
0 A1 XX1 34 22 55
1 A2 XX2 23 44 102
2 A1 XX3 11 12 55
3 A2 XX4 23 43 102
4 A1 XX5 42 76 55
5 A3 XX6 15 56 66
6 A4 XX7 33 45 18
7 A5 XX8 223 87 11
8 A5 XX9 12 56 11
9 A5 XX10 87 34 11
10 A5 XX11 6 23 11
11 A4 XX12 55 33 18