【问题标题】:Join On Indexed Value + 1 Joins Incorrectly加入索引值 + 1 加入错误
【发布时间】:2021-10-25 22:23:50
【问题描述】:

我正在尝试加入两个数据框,其中一个具有通过行/索引计数创建的列。

我的第一个带有计数器的 df 是从另一种方法(不是索引函数)创建的,看起来像

THING   INDEX
  B       1
  B       2
  B       3

我的第二个 df 有一个使用创建的索引

df2['INDEX_RAW'] = df2.reset_index().index

df2['INDEX'] = df2['INDEX_RAW'] + 1

所以我的 df2 看起来像

ITEM   INDEX_RAW  INDEX
 A       0          1
 A       1          2
 A       2          3

当我运行 df3 = df.join(df2, on = 'INDEX', how = 'left', lsuffix = '1') 时,我最终会以某种方式在 df2 上增加索引另一个 +1 并且没有正确连接最后一行。

THING   INDEX1   ITEM   INDEX_RAW   INDEX
B          1      A          1        2
B          2      A          2        3
B          3      NaN        NaN      NaN

【问题讨论】:

  • 根据doc 的参数on,它说Column ... in the caller to join on the index in other,所以这意味着通过指定此参数,您将从df 加入列INDEX 到索引(而不是df2 的同名列),这会创建您在案例中看到的“转变”

标签: python pandas dataframe indexing


【解决方案1】:

on 参数仅指定要加入的df 中的列,它始终与df2 的索引列(即INDEX_RAW)连接,而不是您在此处指定的列。

您可以使用 .set_index() 创建具有不同索引的 df,然后加入。

df3 = df.join(df2.set_index('INDEX'), on = 'INDEX', how = 'left', lsuffix = '1')

【讨论】:

    【解决方案2】:

    您可以使用merge 代替join

    >>> df.merge(df2, on='INDEX', how='left')
    
      THING  INDEX ITEM  INDEX_RAW
    0     B      1    A          0
    1     B      2    A          1
    2     B      3    A          2
    

    【讨论】:

      猜你喜欢
      • 2019-05-04
      • 1970-01-01
      • 2015-08-03
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      相关资源
      最近更新 更多