python - Pandas 与独特的比赛融为一体

标签 python pandas dataframe merge

我正在尝试解决合并两个数据集的问题。让我们看一个例子:

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

Alex 在第一个列表中被提及两次,因此它有两个匹配项 - Soldier 和 Pen。 David 在第二个列表中提到了两次,因此它有两个匹配项 - Car 和 Plush。

您能帮助我使用 pandas.merge 实现此结果吗?

最佳答案

使用GroupBy.cumcount对于计数发生次数的辅助列,合并并最后删除辅助列:

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

关于python - Pandas 与独特的比赛融为一体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55510821/

相关文章:

python - 使用编辑距离替换另一列中的单词

python-3.x - 按条件计算列

r - 在 dplyr mutate 中对具有特定模式的变量求和

python - 使用 Python Flask 运行 REST API 版本的最佳方式是什么

python - 改变python中时间序列的格式?

python - 嵌套 JSON 和 Pandas 规范化

python - 滚动发生值的最近索引

python - Matplotlib tight_layout 导致 RuntimeError

python - wxPython:确保面板中只有一个实例处于打开状态

python - 什么时候使用 df.value_counts() 与 df.groupby ('...' ).count() 比较合适?