Код: Выделить всё
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_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