【问题标题】:loss of index when using pd.merge_asof()使用 pd.merge_asof() 时索引丢失
【发布时间】:2020-10-05 08:25:33
【问题描述】:

我有一个关于 pd.merge_asof 和索引的问题。

首先,我使用我需要的列/数据创建一个数据框,然后按如下方式对其进行排序:

df1 = df[['A','B','C']].sort_values('B')

df1.head()

head 表示 df 中的索引已结转到 df1(索引为日期)。

接下来我执行 pd.merge_asof 如下:

df2 = pd.merge_asof(df, df3, left_on='B', right_on='Z')

但是,如果我检查 df2 的头部,日期索引现在丢失了。我需要将其转入 df2(来自 df/df1),因为我将按照日期顺序重新排序数据(这对我正在做的事情很重要)。

有什么想法可以用简单的方式做到这一点吗?

一如既往的感谢!

保罗

【问题讨论】:

  • 你的df2有多个索引吗?如果你只有一个并且它是排序的datetime,那么你可以做df2 = pd.merge_asof(df, df3, left_index=True, right_index=True)。如果datetime 不是您的索引,那么您可以尝试将索引重置为已排序的datetime 并重做连接吗?请确保dtype 为datetime,然后再设置为索引并合并

标签: python pandas indexing merge


【解决方案1】:

当您合并并且不合并原始索引的任何部分时,索引将失去其相关性。您连接来自不同 DataFrame 的行,那么您如何知道要选择哪个索引?

样本数据

import pandas as pd
df1 = pd.DataFrame({'foo': [1,2,3]}, index=list('abc'))
df2 = pd.DataFrame({'bar': [1,2,3]}, index=list('xyz'))

pd.merge_asof(df1, df2, left_on='foo', right_on='bar')

   foo  bar
0    1    1    # Should the index be 'a' or 'x'?
1    2    2    #                     'b' or 'y'?
2    3    3    #                     'c' or 'z'?

如果您需要在合并中出现索引,请通过将其设为带有reset_index 的列来消除歧义

pd.merge_asof(df1.reset_index(), df2.reset_index(), left_on='foo', right_on='bar')

  index_x  foo index_y  bar
0       a    1       x    1
1       b    2       y    2
2       c    3       z    3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 2011-04-07
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多