Я хочу умножить таблицу поиска (demand
), приведенную для нескольких товаров (здесь: вода, Elec) и типов областей (Com, Ind, Res) с DataFrame (areas
), который является таблицу областей для этих типов областей.Pandas: соединение с внешним продуктом
import pandas as pd
areas = pd.DataFrame({'Com':[1,2,3], 'Ind':[4,5,6]})
demand = pd.DataFrame({'Water':[4,3],
'Elec':[8,9]}, index=['Com', 'Ind'])
До:
areas
Com Ind
0 1 4
1 2 5
2 3 6
demand
Elec Water
Com 8 4
Ind 9 3
После:
area_demands
Com Ind
Elec Water Elec Water
0 8 4 36 12
1 16 8 45 15
2 24 12 54 18
Моя попытка
Многословный и неполные; не работает для произвольного количества товаров.
areas = pd.DataFrame({'area': areas.stack()})
areas.index.names = ['Edge', 'Type']
both = areas.reset_index(1).join(demand, on='Type')
both['Elec'] = both['Elec'] * both['area']
both['Water'] = both['Water'] * both['area']
del both['area']
# almost there; it must be late, I fail to make 'Type' a hierarchical column...
Почти там:
Type Elec Water
Edge
0 Com 8 4
0 Ind 36 12
1 Com 16 8
1 Ind 45 15
2 Com 24 12
2 Ind 54 18
Короче
Как присоединиться/умножать DataFrames areas
и demand
вместе в приличном образом?
Я думаю, с помощью pivot_table означает, что вам не нужно, чтобы удалить область (и я думаю, что лучше читать) 'both.pivot_table (values = ['Elec', 'Water'], rows = 'Edge', cols = 'Type')' –
Спасибо, Энди! Я все еще пытаюсь освоить все эти команды ... – unutbu
'del' +' pivot' оказывается в этом случае быстрее, чем 'pivot_table'. Возможно, причина 'pivot' существует в том, что она быстрее, чем' pivot_table' для тех случаев, когда она применима (например, когда вам не нужна агрегация). – unutbu