2016-08-02 99 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