2016-07-11 8 views
2

私はパンダのデータフレームに以下のデータを持っています。パンダデータフレームのネストされた辞書

私はこのようになります辞書に転化したいと思います:

my_dict = { 

'AB': { 
     'city1': (0.000000, 0.000000), 
     'city2' : (0.100000, 0.200000), 
      'city3' : (0.200000, 0.400000) 

     } 
'BC': { 
     'city4': (0.300000, 0.600000), 
     'city5' : (0.400000, 0.800000), 
     } 
    } 

私はパンダto_dict()方法を知っていますが、これを実行するためにそれを強制することができませんでした。


iso    city  lat  lng 
0 AB    city1 0.000000 0.000000 
1 AB    city2 0.100000 0.200000 
2 AB    city3 0.200000 0.400000 
3 BC    city4 0.300000 0.600000 
4 BC    city5 0.400000 0.800000 

答えて

2

あなたが最初ziplatlngで列zippedを作成することができ、その後、groupbyto_dictダブルで:

#python 3 need convert to list 
df['zipped'] = list(zip(df.lat, df.lng)) 
print (df) 
    iso city lat lng  zipped 
0 AB city1 0.0 0.0 (0.0, 0.0) 
1 AB city2 0.1 0.2 (0.1, 0.2) 
2 AB city3 0.2 0.4 (0.2, 0.4) 
3 BC city4 0.3 0.6 (0.3, 0.6) 
4 BC city5 0.4 0.8 (0.4, 0.8) 

d = df.groupby('iso').apply(lambda x: x.set_index('city')['zipped'].to_dict()).to_dict() 
print (d) 

{'AB': {'city3': (0.20000000000000001, 0.40000000000000002), 
     'city1': (0.0, 0.0), 
     'city2': (0.10000000000000001, 0.20000000000000001)}, 
'BC': {'city4': (0.29999999999999999, 0.59999999999999998), 
     'city5': (0.40000000000000002, 0.80000000000000004)}} 
+0

私は 'DF [ 'zip形式'] = DFを使用するように誘惑されるかもしれません。適用する(ラムダ:(r.lat、r.lng)、軸= 1) 'ここでは... –

関連する問題