【问题标题】:merge one to many without duplicates一对多合并不重复
【发布时间】:2021-11-12 13:10:08
【问题描述】:

您好,有人可以帮忙,如何在不使用删除重复项功能的情况下合并以下 2 个表。

    import pandas as pd
df = pd.DataFrame({'ID' : [1,2,3], 'product' : ['Phone','Car','Bike']})   
df2 = pd.DataFrame({'ID2':[1,1,1,2,2,3,3,3], 'price' : [30,50,30,50,50,20,60,40], 'location' : ['aa','bb','cc','dd', 'ee','tt','hh','yy']})

    ID  product
0   1   Phone
1   2   Car
2   3   Bike

   ID2 price location
0   1   30  aa
1   1   50  bb
2   1   30  cc
3   2   50  dd
4   2   50  ee
5   3   20  tt
6   3   60  hh
7   3   40  yy

我想得到的结果:

df3 = pd.DataFrame({'ID' : [1,'', '',2, '', 3, '',''], 'product' : ['Phone','', '','Car','','Bike', '',''],
'ID2':[1,1,1,2,2,3,3,3], 'price' : [30,50,30,50,50,20,60,40], 'location' : ['aa','bb','cc','dd', 'ee','tt','hh','yy']})

    ID  product ID2 price location
0   1   Phone   1   30    aa
1               1   50    bb
2               1   30    cc
3   2   Car     2   50    dd
4               2   50    ee
5   3   Bike    3   20    tt
6               3   60    hh
7               3   40    yy

【问题讨论】:

  • 你的意思是df2.merge(df, left_on="ID2", right_on="ID").set_index(["ID", "product", "ID2"]) 吗?
  • @Andrej Kesely 工作,谢谢

标签: python pandas dataframe join merge


【解决方案1】:

你可以到一个经典的merge,然后隐藏重复的columns usingmask`:

df3 = df.merge(df2, left_on='ID', right_on='ID2')
cols = df.columns
df3[cols] = df3[cols].mask(df3[cols].duplicated(), '')

输出:

  ID product  ID2  price location
0  1   Phone    1     30       aa
1               1     50       bb
2               1     30       cc
3  2     Car    2     50       dd
4               2     50       ee
5  3    Bike    3     20       tt
6               3     60       hh
7               3     40       yy

【讨论】:

  • 如果我有一个包含 50 到 100k 行和 20/30 个不同列的表,那么 .duplicated 会不会导致我丢失一些数据的问题?
  • 很遗憾没用,也许我应该重写问题
  • @SkittlesBrah 是的,请做,还要详细解释什么不起作用
  • 我简化了一点代码来处理任意数量的列
猜你喜欢
  • 2022-01-19
  • 2012-09-20
  • 2019-09-25
  • 2013-12-26
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 2015-02-16
相关资源
最近更新 更多