Corso Python e Strutture Dati
DataFrame con multiIndex
Classe Multindex
ITA FRA 2011
2012
2013
DEU 2011
2012
2013
USA CHN 2011
2012
XER MER YEAR
(ITA,FRA,2011)
(ITA,FRA,2012)
(ITA,FRA,2013)
(ITA,DEU,2011)
(ITA,DEU,2012)
(ITA,DEU,2013)
(USA,CHN,2011)
(USA,CHN,2012)
[
]
Un oggetto Multindex può essere pensato come
una lista di tuple, ciascuna che identifica una riga In pandas viene gestito
attraverso un oggetto
composto fatto di:
una lista di names
una lista di levels
(lista degli identificativi
associati ai vari names)
una lista di labels
(lista delle posizioni assunte
dagli elementi dei levels)
Classe MultiIndex: metodi di inizializzazione
Tramite metodo della classe MultiIndex
pandas.MultiIndex.from_tuples ( lista di tuple)
pandas.MultiIndex.from_array ( lista di array)
pandas.MultiIndex.from_product (
lista degli insiemi (liste) di cui viene
calcolato il prodotto cartesiano)
[‘a’,’b’]
[1, 2]
(‘a’,1)
(‘a’,2)
(‘b’,1)
ITA FRA 2011
ITA FRA 2012
ITA FRA 2013
ITA DEU 2011
ITA DEU 2012
ITA DEU 2013
USA CHN 2011
USA CHN 2012
(‘b’,2)
Tramite metodo .set_index della classe
DataFrame
XER MER YEAR
ITA FRA 2011
2012
2013
DEU 2011
2012
2013
USA CHN 2011
2012
XER MER YEAR
DF.set_index([‘XER’,MER’,’YEAR])
DF piatto e DF con multiIndex
DF piatto
ITA FRA 2011 765 234
ITA FRA 2012 743 256
ITA FRA 2013 845 342
ITA DEU 2011 829 333
ITA DEU 2012 876 321
ITA DEU 2013 982 434
USA CHN 2011 895 377
USA CHN 2012 895 354
XER MER YEAR V Q
ITA FRA 2011
2012
2013
DEU 2011
2012
2013
USA CHN 2011
2012
XER MER YEAR
set_index(...)
765 234
743 256
845 342
829 333
876 321
982 434
895 377
895 354
V Q
DF.columns [‘XER’,’MER’,’YEAR’,’V’,’Q’] DF.columns [‘’V’,’Q’]
DF con MultiIndex
Molti metodi della classe DataFrame operano sulle colonne
DataFrame con multiIndex: estrattore .loc
ITA FRA 2011
2012
2013
DEU 2011
2012
2013
USA CHN 2011
2012
XER MER YEAR
.loc [ selezione righe , selezione colonne ]
.loc[idx[:, :, [‘2010,‘2011‘,’2012’], ]
ITA FRA 2011
2012
DEU 2011
2012
USA CHN 2011
2012
XER MER YEAR
vuoto per
selezionare
tutte le
colonne
tramite
operatore
idx
from pandas import IndexSlice as idx .sortlevel(inplace=True)
DataFrame con multiIndex: estrattore .loc
ITA FRA 2011
2012
2013
DEU 2011
2012
2013
USA CHN 2011
2012
XER MER YEAR
.loc[‘ITA’,’FRA’]
.loc [ selezione righe , selezione colonne ]
.loc[(‘ITA’,’FRA’, slice(None)) , ]
.loc[idx[‘ITA’,’FRA’, : ] , ]
2011
2012
2013
YEAR
ITA FRA 2011
2011
2011
XER MER YEAR
.loc(axis=0) [‘ITA’,’FRA’,:]
.loc(axis=0)[‘ITA’,’FRA’]
solo righe. Non necessaria virgola finale
DataFrame con multiIndex: estrattore .loc
ITA FRA 2011
2012
2013
DEU 2011
2012
2013
USA CHN 2011
2012
XER MER YEAR
.loc[‘ITA’,’FRA’]
.loc [ selezione righe , selezione colonne ]
.loc[(‘ITA’,’FRA’, slice(None)),]
from pandas import IndexSlice ad idx
.loc[idx[‘ITA’,’FRA’,:],]
ITA FRA 2011
2012
2013
XER MER YEAR
.loc[(slice(None), slice(None), ‘2011‘),]
.loc[idx[:, :, ‘2011‘],] ITA FRA 2011
DEU 2011
USA CHN 2011
XER MER YEAR
.loc(axis=0)[idx[‘ITA’,’FRA’,:]]
.sortlevel(inplace=True)
.loc(axis=0)[idx[:, :, ‘2011‘]]
.loc(axis=0)[‘ITA’,’FRA’,:]
.loc(axis=0)[:, :, ‘2011‘]
.loc(axis=0)[slice(None),Slice(None)‘2011‘]
LEZIONE 1..
www.fordatascientist.org
E00-PyData
H10-Pandas-MultiIndex1.ipynb
DataFrame con multiIndex: estrattore .loc
.loc [ selezione righe , selezione colonne ]
DFI.loc [ idx[:, ['ITA','FRA'] , ['KOR','GBR'] ], [ 'Q', 'X' ] ]
.isin() .isin()
.loc(axis=0) [ idx ['2010':'2012', 'ITA', : , 'HH':'HM'] ]
periodo dal 2010
al 2012
esportatore
Italia
tutti i
partner
fasce alte
di prezzo
.loc(axis=0) [ idx['2002' : '2006' : 2, 'DEU' , 'USA' ] ]
passo
DataFrame con multiIndex: metodi
.index.get_level_values('XER') lista valori di XER
.index.lexsort_depth livello ordinamento
.sortlevel(inplace=True) sort
.unstack(level=....)
.swaplevel(0, 1 , axis=0 ) inverte livello 0 e 1
da indice riga a indice colonna
.stack(level=....) da indice colonna a indice riga
LEZIONE 1..
www.fordatascientist.org
E00-PyData
H12-Pandas-MultiIndex2
Dataframe: metodi
pandas.merge (DF1, DF2,
left_on=....right_on=...)
DataFrame non indicizzati DataFrame indicizzati
pandas.merge (DF1, DF2,
left_index=True right.index=True)
.groupby ( [‘VAR2’, ‘VAR3’] ) .groupby ( level=[‘VAR2’, ‘VAR3’] )
CONTATTI TELEFONO
051 22 35 20
EMAIL
WORKSHOP@VICEM.IT

Strutture dati 07-multiindex

  • 1.
    Corso Python eStrutture Dati DataFrame con multiIndex
  • 2.
    Classe Multindex ITA FRA2011 2012 2013 DEU 2011 2012 2013 USA CHN 2011 2012 XER MER YEAR (ITA,FRA,2011) (ITA,FRA,2012) (ITA,FRA,2013) (ITA,DEU,2011) (ITA,DEU,2012) (ITA,DEU,2013) (USA,CHN,2011) (USA,CHN,2012) [ ] Un oggetto Multindex può essere pensato come una lista di tuple, ciascuna che identifica una riga In pandas viene gestito attraverso un oggetto composto fatto di: una lista di names una lista di levels (lista degli identificativi associati ai vari names) una lista di labels (lista delle posizioni assunte dagli elementi dei levels)
  • 3.
    Classe MultiIndex: metodidi inizializzazione Tramite metodo della classe MultiIndex pandas.MultiIndex.from_tuples ( lista di tuple) pandas.MultiIndex.from_array ( lista di array) pandas.MultiIndex.from_product ( lista degli insiemi (liste) di cui viene calcolato il prodotto cartesiano) [‘a’,’b’] [1, 2] (‘a’,1) (‘a’,2) (‘b’,1) ITA FRA 2011 ITA FRA 2012 ITA FRA 2013 ITA DEU 2011 ITA DEU 2012 ITA DEU 2013 USA CHN 2011 USA CHN 2012 (‘b’,2) Tramite metodo .set_index della classe DataFrame XER MER YEAR ITA FRA 2011 2012 2013 DEU 2011 2012 2013 USA CHN 2011 2012 XER MER YEAR DF.set_index([‘XER’,MER’,’YEAR])
  • 4.
    DF piatto eDF con multiIndex DF piatto ITA FRA 2011 765 234 ITA FRA 2012 743 256 ITA FRA 2013 845 342 ITA DEU 2011 829 333 ITA DEU 2012 876 321 ITA DEU 2013 982 434 USA CHN 2011 895 377 USA CHN 2012 895 354 XER MER YEAR V Q ITA FRA 2011 2012 2013 DEU 2011 2012 2013 USA CHN 2011 2012 XER MER YEAR set_index(...) 765 234 743 256 845 342 829 333 876 321 982 434 895 377 895 354 V Q DF.columns [‘XER’,’MER’,’YEAR’,’V’,’Q’] DF.columns [‘’V’,’Q’] DF con MultiIndex Molti metodi della classe DataFrame operano sulle colonne
  • 5.
    DataFrame con multiIndex:estrattore .loc ITA FRA 2011 2012 2013 DEU 2011 2012 2013 USA CHN 2011 2012 XER MER YEAR .loc [ selezione righe , selezione colonne ] .loc[idx[:, :, [‘2010,‘2011‘,’2012’], ] ITA FRA 2011 2012 DEU 2011 2012 USA CHN 2011 2012 XER MER YEAR vuoto per selezionare tutte le colonne tramite operatore idx from pandas import IndexSlice as idx .sortlevel(inplace=True)
  • 6.
    DataFrame con multiIndex:estrattore .loc ITA FRA 2011 2012 2013 DEU 2011 2012 2013 USA CHN 2011 2012 XER MER YEAR .loc[‘ITA’,’FRA’] .loc [ selezione righe , selezione colonne ] .loc[(‘ITA’,’FRA’, slice(None)) , ] .loc[idx[‘ITA’,’FRA’, : ] , ] 2011 2012 2013 YEAR ITA FRA 2011 2011 2011 XER MER YEAR .loc(axis=0) [‘ITA’,’FRA’,:] .loc(axis=0)[‘ITA’,’FRA’] solo righe. Non necessaria virgola finale
  • 7.
    DataFrame con multiIndex:estrattore .loc ITA FRA 2011 2012 2013 DEU 2011 2012 2013 USA CHN 2011 2012 XER MER YEAR .loc[‘ITA’,’FRA’] .loc [ selezione righe , selezione colonne ] .loc[(‘ITA’,’FRA’, slice(None)),] from pandas import IndexSlice ad idx .loc[idx[‘ITA’,’FRA’,:],] ITA FRA 2011 2012 2013 XER MER YEAR .loc[(slice(None), slice(None), ‘2011‘),] .loc[idx[:, :, ‘2011‘],] ITA FRA 2011 DEU 2011 USA CHN 2011 XER MER YEAR .loc(axis=0)[idx[‘ITA’,’FRA’,:]] .sortlevel(inplace=True) .loc(axis=0)[idx[:, :, ‘2011‘]] .loc(axis=0)[‘ITA’,’FRA’,:] .loc(axis=0)[:, :, ‘2011‘] .loc(axis=0)[slice(None),Slice(None)‘2011‘]
  • 8.
  • 9.
    DataFrame con multiIndex:estrattore .loc .loc [ selezione righe , selezione colonne ] DFI.loc [ idx[:, ['ITA','FRA'] , ['KOR','GBR'] ], [ 'Q', 'X' ] ] .isin() .isin() .loc(axis=0) [ idx ['2010':'2012', 'ITA', : , 'HH':'HM'] ] periodo dal 2010 al 2012 esportatore Italia tutti i partner fasce alte di prezzo .loc(axis=0) [ idx['2002' : '2006' : 2, 'DEU' , 'USA' ] ] passo
  • 10.
    DataFrame con multiIndex:metodi .index.get_level_values('XER') lista valori di XER .index.lexsort_depth livello ordinamento .sortlevel(inplace=True) sort .unstack(level=....) .swaplevel(0, 1 , axis=0 ) inverte livello 0 e 1 da indice riga a indice colonna .stack(level=....) da indice colonna a indice riga
  • 11.
  • 12.
    Dataframe: metodi pandas.merge (DF1,DF2, left_on=....right_on=...) DataFrame non indicizzati DataFrame indicizzati pandas.merge (DF1, DF2, left_index=True right.index=True) .groupby ( [‘VAR2’, ‘VAR3’] ) .groupby ( level=[‘VAR2’, ‘VAR3’] )
  • 13.
    CONTATTI TELEFONO 051 2235 20 EMAIL WORKSHOP@VICEM.IT