【问题标题】:pandas merge_asof keys must be sorted error after sortingpandas merge_asof keys must be sorted 排序后报错
【发布时间】:2018-08-08 21:34:48
【问题描述】:

我想将目标列从一个数据框合并到另一个数据框。合并的数据框有更多的键,它们很接近,但与原始数据框不完全匹配。请参阅下面的示例:

原始数据帧 (FDMA)

DMA 
130506  
130510  
130512  
130555  
130556  

合并数据框(ZC)

DMA        Distance (Miles)
1305060    303.87
1305061    305.35
1305062    278.80
1305065    299.94
1305067    291.83

pd.merge_asof(FDMA,ZC[['DMA','Distance (Miles)']],on='DMA')

这是我所期待的

DMA     Distance (Miles)
130506  303.87
130510  291.83
130512  XXX
130555  XXX
130556  XXX

我试过上面的代码,得到一个 ValueError: right keys must be sorted 错误。我已经对值进行了排序并重置了索引,但仍然出现错误。任何帮助表示赞赏!

【问题讨论】:

  • pd.merge_asof(FDMA,ZC[['DMA','Distance (Miles)']].sort_values('DMA'),on='DMA')
  • 非常感谢斯科特!那行得通。您能告诉我这与在尝试 merge_asof 之前对每个数据帧进行排序有何不同吗?
  • 嗯,应该没有什么不同,我只是想清楚的是,您是根据连接键而不是索引进行排序的。

标签: python pandas merge


【解决方案1】:

另外,当你的on 列中有 NA 时,pandas 会抛出同样的错误,所以在合并之前你应该使用df.dropna() 来解决这个问题。

【讨论】:

    【解决方案2】:

    错误码“ValueError: right keys must be sorted”,最有效的解决方法是在keys列的merge中添加sort_values:

    pd.merge_asof(FDMA,ZC[['DMA','Distance (Miles)']].sort_values('DMA'),on='DMA')
    

    这可确保数据帧按照pd.merge_asof 的要求按连接键排序。

    【讨论】:

    • 很抱歉立即跟进,但我注意到有些值不正确。任何时候合并的值有一个额外的数字,它都不起作用。前任。 130506 将合并与 130510 和 1305060 关联的值。有没有简单的方法可以解决这个问题,还是应该是另一个问题?
    • Hrm... 不确定我是否完全理解,但 merge_asof 加入整数、浮点数或日期时间,因此在数轴上一个额外的数字非常遥远。你能把多余的数字剪掉吗?
    猜你喜欢
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2022-12-19
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    相关资源
    最近更新 更多