Chcę pomnożyć tabelę odnośników (demand
), podaną dla wielu towarów (tutaj: Woda, Elec) i typów obszarów (Com, Ind, Res) z DataFrame (areas
), która jest tabela obszarów dla tych typów obszarów.Pandy: łącz z zewnętrznym produktem
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'])
Przed:
areas
Com Ind
0 1 4
1 2 5
2 3 6
demand
Elec Water
Com 8 4
Ind 9 3
Po:
area_demands
Com Ind
Elec Water Elec Water
0 8 4 36 12
1 16 8 45 15
2 24 12 54 18
Moja próba
gadatliwy i niekompletne; nie działa dla dowolnej liczby towarów.
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...
Prawie tam:
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
W skrócie
Jak dołączyć/pomnożyć DataFrames areas
i demand
razem w przyzwoity sposób?
myślę użyciu pivot_table oznacza, że nie ma potrzeby, aby usunąć obszar (i myślę, że jest ładniej czytać) 'both.pivot_table (values = ['Elec', 'Water'], rows = 'Edge', cols = 'Type')' –
Dzięki, Andy! Nadal staram się opanować wszystkie te polecenia ... – unutbu
'del' +' pivot' okazuje się w tym przypadku szybszym niż 'pivot_table'. Być może przyczyną 'pivot' jest to, że jest szybsza niż' pivot_table' dla tych przypadków, w których ma zastosowanie (np. Kiedy nie potrzebujesz agregacji). – unutbu