Кадр данных pandas в качестве таблицы поиска для другого кадра данных другой длиныPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Кадр данных pandas в качестве таблицы поиска для другого кадра данных другой длины

Сообщение Anonymous »

У меня есть небольшой фрейм данных pandas, содержащий данные всего из нескольких строк и трех столбцов:

Код: Выделить всё

import pandas as pd
df_size = pd.DataFrame([[0.510,0.450,0.540],
[0.899,0.820,1.150],
[1.745,1.587,2.020],
[2.020,1.745,2.405],
], columns=['diameter_mean', 'diameter_min','diameter_max'])
второй фрейм данных содержит (гораздо длинную) таблицу поиска:

Код: Выделить всё

df_lookup = pd.DataFrame([[0.450,0.021548],
[0.510,0.021791],
[0.540,0.022038],
[0.565,0.022289],
[0.695,0.022545],
[0.720,0.034321],
[0.770,1.292340],
[0.820,1.296070],
[0.899,1.302340],
[1.150,2.311770],
[1.361,3.325140],
[1.587,4.144621],
[1.745,3.498933],
[2.020,3.512665],
[2.405,3.610773],
], columns=['diameter', 'SMS'])
Означает, что не для какой-либо записи таблицы поиска может существовать точка данных в df_size.
На основе df_lookup['diameter']
На основе df_lookup['diameter']
code> Я хочу автоматически найти соответствующие значения SMS для всех трех столбцов df_size['diameter_mean'], df_size['diameter_min'] и df_size['diameter_max'] и добавить найденные значения в виде трех новых столбцов ['SMS'], ['SMS_min'], ['SMS_max'] в кадр данных набора данных 'df_size'.
Я попытался создать три новые столбцы со слиянием, но это вызывает, как и ожидалось, ошибку valueError:

Код: Выделить всё

df_size['SMS'] = df_size.merge(df_lookup, left_on='diameter_mean', right_on='diameter')
df_size['SMS_min'] = df_size.merge(df_lookup, left_on='diameter_min', right_on='diameter')
df_size['SMS_max'] = df_size.merge(df_lookup, left_on='diameter_max', right_on='diameter')
из-за нескольких столбцов, которым будет присвоено одно значение для всех трех строк кода.
В качестве альтернативы я пробовал решения с применением и с картой, но кажется, что я что-то упускаю (здесь пример только для столбца диаметра_среднего):

Код: Выделить всё

df_size['SMS'].apply(lambda df_lookup.SMS: df_lookup['diameter'][(df_size['diameter_mean'])].values[0])
вызывает ошибку ключа.
Назначенный df_size будет выглядеть так:

Код: Выделить всё

df_size
'diameter_mean' 'diameter_min' 'diameter_max' 'SMS'     'SMS_min'    'SMS_max'
0.510           0.450           0.540         0.021791  0.021548     0.022038
0.899           0.820           1.150         1.302340  1.296070     2.311770
1.745           1.587           2.020         3.498933  4.144621     3.512665
2.020           1.745           2.405         3.512665  3.498933     3.610773
Необходимо ли, чтобы оба фрейма данных имели строго монотонное поведение с точки зрения параметра поиска (= диаметра)?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ent-length
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»