2016-08-02 8 views
2

私はこの記事を参考にしています...私は3つの列(aff_id、mktおよびbkgs)のデータフレームを持っています。 aff_idとMKTは):multiindexデータフレーム(Python)を反復し、インデックスと値のペアにdictsを割り当てます。

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

は私に見えるマルチインデックスのデータフレームを与えるために、このようなビット:私が今やりたいことは、各aff_idを反復処理する、との辞書を作ることです

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

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

dictの理解と別の解決策:

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

関連する問題