merge_asof 在添加的列中给出 NaN 值

时间:2020-12-20 10:52:41

标签: python pandas dataframe

我之前询问了 question,关于在最近的日期时间和通过 ID 合并数据帧,并建议使用 merge_asof,但我在列中得到 NaN 值。 df 示例如下:

df1
  ID1       active_at
0 111       2020-01-01 00:50:00.000
1 222       2020-01-05 05:00:00.000
2 333       2020-01-10 10:00:00.000

df2
  ID2       timeObserved          Value
0 111       2020-01-01 00:55:00   1
1 111       2020-01-05 01:00:00   2
2 222       2020-01-10 05:50:00   3
3 222       2020-01-15 04:55:00   4
4 333       2020-01-20 10:10:00   5
5 333       2020-01-20 11:00:00   6

我想得到类似于:

df3
  ID1       active_at                 Value
0 111       2020-01-01 00:50:00.000   1
1 222       2020-01-05 05:00:00.000   4
2 333       2020-01-10 10:00:00.000   5

df3
  ID1       active_at                 Value    ID2    timeObserved
0 111       2020-01-01 00:50:00.000   1        111    2020-01-01 00:55:00
1 222       2020-01-05 05:00:00.000   4        222    2020-01-15 04:55:00
2 333       2020-01-10 10:00:00.000   5        333    2020-01-20 10:10:00

我用它来合并它们:

df3 = pd.merge_asof(df1,df2, left_on='active_at', right_on='timeObserved', left_by='ID1', 
         right_by='ID2', direction='nearest')

但我得到了这个结果:

df1
  ID1       active_at                 Value    ID2    timeObserved
0 111       2020-01-01 00:50:00.000   NaN      NaN    NaT
1 222       2020-01-05 05:00:00.000   NaN      Nan    Nat
2 333       2020-01-10 10:00:00.000   5        333    2020-01-20 10:10:00

在真实数据中,我正确地得到了 50 个中的 2 个。 我确定有匹配的 ID,这就是我想知道的原因。

我试过: 将 tolerance=pd.Timedelta('2d') 设置为多天。 在合并之前仔细检查 dType 是否正确。 dateTime64[ns] 在 'active_at' 和 'timeObserved' 上,在 'value' 和 'ID' 上是 int。 确保有匹配的 ID。

当我使用 df3.info() 时,我注意到“Value”和“ID2”的 dType 已更改为 float64。我不知道为什么,是因为 NaN 值还是我犯了一些错误?

df1 中有 2.732 行,df2 中有 40.500 行。

0 个答案:

没有答案
相关问题