2016-08-02 100 views
2

我在我的機智結束這個...我有一個三列(aff_id,mkt和bkgs)的數據框我分組他們( aff_id和MKT):迭代多指標數據框(Python)和分配索引到索引值對

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

給我一個多指標數據幀,看起來有點像這樣:

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

我想現在要做的是遍歷每個aff_id,並作出的字典mkt(key) - bkgs(value)對,但由於每個aff_id值具有不同的mkt值,因此Python會在df_gb_aff.loc [ index_1,index_2]不存在。

我已經得到的指標與這些:

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

,並試圖與遍歷:

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

任何人有這樣一種合適的方式?

回答

1

與字典理解另一種解決方案:

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 

如果需要循環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]在df_gb_aff.index IDX}正是我所期待的。太好了! –

+0

如果我的回答很有幫助,請不要忘記[接受](http://meta.stackexchange.com/a/5235/295067)它。謝謝。 – jezrael