«Правильные ключи должны быть отсортированы» в два столбца соединения с ключом времени и назначить идентификатор - PullRequest
2 голосов
/ 07 апреля 2019

на основе моего предыдущего вопроса

Соедините два кадра данных и разверните их, назначив идентификатор

У меня два кадра данных выглядят так:

 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

Я хочу вставить фрейм данных в другой фрейм с ключом времени с идентификатором, который следует за временем.Тем не менее, результаты получили ошибку 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

спасибо за помощь.

1 Ответ

1 голос
/ 07 апреля 2019

Вы получаете:

правильные ключи должны быть отсортированы

Вот столбец правильных ключей 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'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...