【问题标题】:Why does using merge function in two different dataframes results me more rows?为什么在两个不同的数据帧中使用合并功能会导致更多行?
【发布时间】:2021-06-29 20:41:22
【问题描述】:

我有两个形状的数据框: (4000,3) (2000,3) ,下面是信息和列:

df1:

imo speed length
1 1 4
1 2 4
2 10 10
2 12 10

df2:

imo dwt name
1 52 test1
2 62 test2
3 785 test3
4 353 test4

我想将 df2 的列 dwt 添加到基于 df1 的在同一个imo上。

imo speed length dwt
1 1 4 52
1 2 4 52
2 10 10 62
2 12 10 62

但是当我尝试做 pd.merge(df1,df2, on = 'imo', how = 'inner') 时,结果比 df1 的原始形状要多得多,这怎么可能?

【问题讨论】:

  • 我无法复制该问题。请提供具有更多信息的可重现示例:python 版本、pandas 版本等。
  • df2 中的 imo 是唯一的吗?如果不是这种情况,那么您将获得每个非唯一键的叉积合并。
  • @Viktor 是的,它是独一无二的
  • 那么在pd.merge(df1,df2, on = 'imo', how = 'inner')之后你可以使用drop_duplicates()方法
  • @AnuragDabas 结果又多了很多行

标签: python pandas dataframe


【解决方案1】:

您可以使用另一种方式,无需合并功能:

dwt_lst = []
for imo in df1.imo.values:
   dwt = df2[df2.imo == imo].dwt.values[0]
   dwt_lst.append(dwt)
df1['dwt'] = dwt_lst

【讨论】:

    【解决方案2】:

    这样用merge就行了:

    pd.merge(df1, df2, how='left', on='imo').drop(columns='name')
    

    例子:

    >>> df1 = pd.DataFrame({'imo': [1,1,2,2], 'speed': [1,2,10,12], 'length': [4,4,10,10]})
    >>> df2 = pd.DataFrame({'imo': [1,2,3,4], 'dwt': [52,62,785,353], 'name': ['test1','test2','test3','test4']})
    >>> pd.merge(df1, df2, how='left', on='imo').drop(columns='name')
       imo  speed  length  dwt
    0    1      1       4   52
    1    1      2       4   52
    2    2     10      10   62
    3    2     12      10   62
    

    【讨论】:

      猜你喜欢
      • 2013-01-03
      • 2014-07-31
      • 2020-04-05
      • 2020-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 2019-02-16
      相关资源
      最近更新 更多