"right keys must be sorted"将两列与键连接 时间和分配ID



基于我之前的问题

联接两个数据帧并使用分配 ID 展开数据帧

我有两个数据帧看起来像这样:

 df1
 ID         Time
 ID_E   9:07:00
 ID_E   9:15:00
 ID_B   9:09:00
 ID_B   9:14:00
 df2 
 Time        X        Y
 9:07:00    767597  9427273
 9:08:00    767597  9427284
 9:09:00    767608  9427284
 9:10:00    767608  9427295
 9:11:00    767619  9427306
 9:12:00    767623  9427311
 9:13:00    767628  9427319
 9:14:00    767634  9427327
 9:15:00    767640  9427335

我想将数据帧插入另一个数据帧,其中 ID 与时间后面的时间键似乎在时间后面。但是,结果right keys must be sorted错误,因为df1的时间未排序。如何解决这种情况?

我使用了以下代码:

df1 = pd.read_csv(data1.csv)
df1.columns = df1.columns.str.strip()
df2 = pd.read_csv(data2.csv)
df2.columns = df2.columns.str.strip()
df1['Time'] = pd.to_datetime(df1['Time'])
df2['Time'] = pd.to_datetime(df2['Time'])
df = pd.merge_asof(df2, df1, on='Time').assign(Time = lambda x: x['Time'].dt.strftime('%H:%M'))
df

我的预期结果:

  ID    Time         X        Y
  ID_E  9:07:00 767597  9427273
  ID_E  9:08:00 767597  9427284
  ID_E  9:09:00 767608  9427284
  ID_E  9:10:00 767608  9427295
  ID_E  9:11:00 767619  9427306
  ID_E  9:12:00 767623  9427311
  ID_E  9:13:00 767628  9427319
  ID_E  9:14:00 767634  9427327
  ID_E  9:15:00 767640  9427335
  ID_B  9:09:00 767608  9427284
  ID_B  9:10:00 767608  9427295
  ID_B  9:11:00 767619  9427306
  ID_B  9:12:00 767623  9427311
  ID_B  9:13:00 767628  9427319
  ID_B  9:14:00 767634  9427327

谢谢你帮助我。

你会得到:

必须对正确的键进行排序

以下是右键列df1.Time,因此有必要在merge_asof之前按此列排序:

df1 = df1.sort_values('Time')

如果错误还需要按df2.Time排序:

必须对左键进行排序

df2 = df2.sort_values('Time')

一起:

df1 = pd.read_csv(data1.csv)
df1.columns = df1.columns.str.strip()
df2 = pd.read_csv(data2.csv)
df2.columns = df2.columns.str.strip()
df1['Time'] = pd.to_datetime(df1['Time'])
df2['Time'] = pd.to_datetime(df2['Time'])
df1 = df1.sort_values('Time')
df = pd.merge_asof(df2, df1, on='Time').assign(Time = lambda x: x['Time'].dt.strftime('%H:%M'))

最新更新