Задать вопрос
Recosh
@Recosh
Программист студент

Как правильно объединять таблицу, если index не чёткий в pandas?

Приветствую! Теперь у меня вот такой вопрос. Допустим есть 2 таблицы:
index	param	paramJoined
0	-2	None
1	-2	None
2	0	None
3	2	None

и
index		param
0.000000	-3
0.434783	-3
0.869565	1
1.304348	0
1.739130	1
2.173913	3
2.608696	3
3.043478	6
3.478261	4
3.913043	7

И я хочу, не меняя индексы первой таблицы, присвоить ближайшее предыдущее значение по индексу из второй таблицы.

Вот такой какашечный код получился для реализации лиж бы работало:
# df1 первая таблица, df2 вторая
for index, item in df1.iterrows():
  df1.at[index, 'paramJoined'] = df2[df2.index <= index].param.tail(1).values[0]

И получился правильный результат:
index	param	paramJoined
0	-2	-3
1	-2	1
2	0	1
3	2	3


Но такой способ не производительный при большом объёме данных, подскажите как правильно оформить данный алгоритм?
  • Вопрос задан
  • 56 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
Recosh
@Recosh Автор вопроса
Программист студент
В общем решил пока так:
#Переименовываем стобец
df2Renamed = df2.rename(columns={'param': 'paramJoined'})
#Объединяем и сортируем по индексу
df1concat = pd.concat([df1,df2Renamed]).sort_index()
#Заполняем пустышки
df1concat.paramJoined = df1concat.paramJoined.ffill()
#Удаляем вспомогательные данные
df1result = df1concat.dropna(subset=['param'])
df1result

Но если кто сделает красивее, буду благодарен)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@zexer
Очевидно, что такой индекс в таблице это какая-то ошибка, такого не должно быть, если мыслить разумно.
Индекс представляет собой идентификатор строки, он чаще всего не носит в себе информации, а тем более он не должен носить в себе вещественные числа (float).
Но если вам нужно объединить как-то эти таблицы, то мне кажется что сперва лучше поработать отдельно над индексом, чтобы он приводился к нужному виду, а затем уже сцеплять.
P.S. Поделитесь, что у вас за задача, что приходится городить такое?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы