#pandas #csv
#pandas #csv
Вопрос:
Я хочу вставить фрейм данных в другой фрейм данных с ключом времени, идентификатор которого, по-видимому, следует за временем. Как это сделать?
мои данные выглядят так:
df1
ID Time
ID1 10:40
ID1 11:00
ID2 11:10
ID2 11:30
df2
Time X Y
10:40 45 50
10:50 55 55
11:00 65 60
11:10 75 65
11:20 85 70
11:30 95 75
мой ожидаемый результат выглядит примерно так:
ID Time X Y
ID1 10:40 45 50
ID1 10:50 55 55
ID1 11:00 65 60
ID2 11:10 75 65
ID2 11:20 85 70
ID2 11:30 95 75
спасибо за вашу помощь
Ответ №1:
Используйте merge_asof
со столбцами datetimes, последнее использование Series.dt.strftime
для преобразования в HH:MM
строки:
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'))
print (df)
Time X Y ID
0 10:40 45 50 ID1
1 10:50 55 55 ID1
2 11:00 65 60 ID1
3 11:10 75 65 ID2
4 11:20 85 70 ID2
5 11:30 95 75 ID2
Комментарии:
1. возможно ли это без преобразования в datetime?
2. Должно быть другое решение
df2.merge(df1, how='outer').ffill()
, но немного опасное — необходимо всегда сопоставлять первые строки, иначе неверно назначенные идентификаторы. Это зависит от данных.3. спасибо за ваш совет. Я получил
KeyError: 'Time'
. как насчет этого?4. @Arief Что такое
print (df1.columns.tolist())
иprint (df2.columns.tolist())
?5. @Arief — Если проверка вторая, то это траление пространства
'Time '
, поэтому используйтеdf2.columns = df2.columns.str.strip()