如何基于公共列但值重复来合并两个数据框?

时间:2019-02-08 06:11:45

标签: python pandas

我有两个具有相同列但数据不同的数据框。一个是包含20,000个条目的样本数据集,另一个是包含1,093,564个条目的控制数据集。我想从控件数据集中提取相同数量的记录,这些记录的日记名称与示例数据集中的日记名称相同,但文章(标题)唯一。

df1:

journal title
foo abs
bar abc
baz ghj
foo jkl
baz mnj

df2:

journal title
bar nko
foo cvb
foo yui
baz sdf 
bar hyt
foo kdm
baz bnd
baz lko
foo mnx
bar sdm
baz rty    

两个数据集中的日记名称相同,但标题是唯一的,并且在df1中与df2不同。我想要这样的结果:

journal title_x title_y
foo abs cvb
bar abc nko
baz ghj sdf
foo jkl kdm
baz mnj bnd

1 个答案:

答案 0 :(得分:1)

merge与左联接一起使用,但首先需要创建计数器列,以合并df2['journal']中的删除连续重复的值,并使用不相等的移位值进行比较:

df1['g'] = df1.groupby('journal').cumcount()
df2 = df2[df2['journal'].ne(df2['journal'].shift())]
df2['g'] = df2.groupby('journal').cumcount()

df = df1.merge(df2, on=['journal','g'], how='left').drop('g', axis=1)
print (df)
  journal title_x title_y
0     foo     abs     cvb
1     bar     abc     nko
2     baz     ghj     sdf
3     foo     jkl     kdm
4     baz     mnj     bnd