【问题标题】:Pandas merge with unique matches [duplicate]熊猫与独特的匹配合并[重复]
【发布时间】:2019-08-25 21:46:35
【问题描述】:

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

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 实现这个结果吗?

【问题讨论】:

  • 问题是你合并重复,所以执行笛卡尔积。 Solution is described here. 通过添加一列增量来区分重复项,从而使键唯一化。

标签: python pandas dataframe merge


【解决方案1】:

使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多