2017-02-15 5 views
1

Мне нужно создать несколько новых столбцов на основе значения dataframe и найти dataframe с некоторыми расценками.Создать столбец из нескольких фреймов данных

Имея df1 в

zone hh  hhind 
0 14  112.0 3.4 
1 15  5.0  4.4 
2 16  0.0  1.0 

и look_up ДФ в

ind  per1 per2 per3 per4 
0 1.0  1.000 0.000 0.000 0.000 
24 3.4  0.145 0.233 0.165 0.457 
34 4.4  0.060 0.114 0.075 0.751 

как я могу обновить df1.hh1 путем умножения look_up.per1, основанный на df1.hhind и lookup.ind

zone hh  hhind hh1 
0 14  112.0 3.4 16.240 
1 15  5.0  4.4 0.300 
2 16  0.0  1.0 0.000 

в момент получения результата путем слияния таблиц и выполнения арифметики.

r = pd.merge(df1, look_up, left_on="hhind", right_on="ind") 
r["hh1"] = r.hh *r.per1 

Я хотел бы знать, есть ли более прямой способ выполнить это, не сливая таблицы?

ответ

1

Вы можете установить первый hhind и ого как оси индексов df1 и look_up dataframes соответственно. Затем умножьте соответствующие элементы на hh и per1 поэтапно.

Карта эти результаты в колонке hhind и назначить их в новый столбец позже, как показано ниже:

mapper = df1.set_index('hhind')['hh'].mul(look_up.set_index('ind')['per1']) 
df1.assign(hh1=df1['hhind'].map(mapper)) 

enter image description here

1

другое решение:

df1['hh1'] = (df1['hhind'].map(lambda x: look_up[look_up["ind"]==x]["per1"])) * df1['hh'] 
Смежные вопросы