2016-08-02 7 views
2

Ich bin am Ende meines Wissens mit diesem ... Ich habe einen Datenrahmen von drei Spalten (aff_id, mkt und bkgs) Ich gruppiert von zwei von ihnen (aff_id und mkt):Iterieren über Multiindex-Datenrahmen (Python) und Zuweisen von Dicts zu Index-Wert-Paaren

df_gb_aff = df.groupby(["affiliate_id", 'mkt']).sum() 
df_gb_aff.sort('bkgs', ascending=False, inplace=True) 

geben Sie mir ein Multiindex Datenrahmen, die ein bisschen wie folgt aussieht:

       bkgs 
aff_id   mkt 
2508b863a1a4 bcab9d6ec630 1910.707124 
6cc5f0e8c96b b7d0dbd38376 1374.924684 
188e238326e4 446bb566f202 1206.589522 
       dbe759c691eb 1203.979908 
6cc5f0e8c96b 0e9013464c4c 1203.532310 

Was will ich jetzt zu tun ist, über jeden aff_id laufen, und machen einen dict von mkt (key) - bkgs (value) -Paare, aber da jeder aff_id-Wert verschiedene mkt-Werte hat, gibt Python einen Fehler aus, wenn ein df_gb_aff.loc [ index_1, index_2] existiert nicht.

Ich habe immer die Indizes mit diesen:

aff_list = df_gb_aff.index.levels[0].values 
mkt_list = df_gb_aff.index.levels[1].values 

und versucht, mit iterieren:

for i in aff_list: 
    for j in mkt_list : 
     print df_gb_aff.loc[i,j] 

Wer eine vernünftige Art und Weise, dies zu tun?

Antwort

1

Eine andere Lösung mit dict Verständnis:

d = {idx[1]: df_gb_aff.ix[idx][0] for idx in df_gb_aff.index} 

print (d) 
{'446bb566f202': 1206.589522, 
'bcab9d6ec630': 1910.7071239999998, 
'0e9013464c4c': 1203.5323100000001, 
'dbe759c691eb': 1203.979908, 
'b7d0dbd38376': 1374.9246840000001} 

print (d['bcab9d6ec630']) 
1910.707124 

Und wenn Bedarf Schleife Multiindex:

for idx in df_gb_aff.index: 
    print (idx) 
    print (df_gb_aff.ix[idx]) 

bkgs 1910.707124 
Name: (2508b863a1a4, bcab9d6ec630), dtype: float64 
('6cc5f0e8c96b', 'b7d0dbd38376') 
bkgs 1374.924684 
Name: (6cc5f0e8c96b, b7d0dbd38376), dtype: float64 
('188e238326e4', '446bb566f202') 
bkgs 1206.589522 
Name: (188e238326e4, 446bb566f202), dtype: float64 
('188e238326e4', 'dbe759c691eb') 
bkgs 1203.979908 
Name: (188e238326e4, dbe759c691eb), dtype: float64 
('6cc5f0e8c96b', '0e9013464c4c') 
bkgs 1203.53231 
Name: (6cc5f0e8c96b, 0e9013464c4c), dtype: float64 
+0

d = {idx: df_gb_aff.ix [idx] [0] für idx in df_gb_aff.index} ist genau das, was ich gesucht habe. nett! –

+0

Wenn meine Antwort hilfreich war, nicht vergessen [accept] (http://meta.stackexchange.com/a/5235/295067) es. Vielen Dank. – jezrael

Verwandte Themen