我正在尝试合并两个数据集来解决问题。我们来看一个例子:
borrowed_money = {'name': ['Alex', 'Alex', 'David', 'David', 'David', 'Mike', 'Mike'],
'sum': [10,10,30,25,10,20,30]}
intersted_in = {'name': ['David', 'Alex', 'David', 'Mike', 'Mike', 'Alex', 'Mike','Alex', 'John'],
'toy': ['Car', 'Soldier', 'Plush', 'Soldier', 'Spaceship', 'Pen', 'Plush', 'Card', 'Spaceship']}
p1 = pandas.DataFrame(borrowed_money)
p2 = pandas.DataFrame(intersted_in)
pandas.merge(p1,p2)
结果:
name sum toy
0 Alex 10 Soldier
1 Alex 10 Pen
2 Alex 10 Card
3 Alex 10 Soldier
4 Alex 10 Pen
5 Alex 10 Card
6 David 30 Car
7 David 30 Plush
8 David 25 Car
9 David 25 Plush
10 David 10 Car
11 David 10 Plush
12 Mike 20 Soldier
13 Mike 20 Spaceship
14 Mike 20 Plush
15 Mike 30 Soldier
16 Mike 30 Spaceship
17 Mike 30 Plush
所需结果:
对我来说,理想的结果是两个数据集的组合,每个数据集只能使用有限的次数。因此,不会出现重复的比赛。
name sum toy
0 Alex 10 Soldier
1 Alex 10 Pen
2 David 30 Car
3 David 25 Plush
4 Mike 20 Soldier
5 Mike 30 Soldier
亚历克斯在第一名单中被两次提及,因此它有两场比赛-士兵和彭。大卫在第二个清单中两次提到,因此有两场比赛-汽车和毛绒。
可以请您使用pandas.merge帮助我达到此效果吗?
答案 0 :(得分:3)
使用GroupBy.cumcount
作为辅助对象列以计算发生次数,merge
,最后删除辅助对象列:
p1['g'] = p1.groupby('name').cumcount()
p2['g'] = p2.groupby('name').cumcount()
df = pd.merge(p1,p2).drop('g', axis=1)
print (df)
name sum toy
0 Alex 10 Soldier
1 Alex 10 Pen
2 David 30 Car
3 David 25 Plush
4 Mike 20 Soldier
5 Mike 30 Spaceship