2016-09-01 13 views
2

目的:私は、マルチレベルインデックスの各行を各グループの合計数で除算しようとしています。パンダ - マルチインデックス部門[すなわち、グループ別]

は、具体的には:は、以下のデータを考えると、私は、各グループの総数(日付、国と色の間すなわち合計)

      Number 
Date Country Colour  
2011 US  Red  4 
       Blue  6 
2012 IN  Red  9 
     IE  Red  5 
       Blue  5 
2013 JP  Red  15 
       Blue  25 

によって赤と青のビー玉の数を分割したいですデータを再生するためのコードである。ここ

      Number 
Date Country Colour  
2011 US  Red  0.4 
       Blue  0.6 
2012 IN  Red  1.0 
     IE  Red  0.5 
       Blue  0.5 
2013 JP  Red  0.375 
       Blue  0.625 

arrays = [np.array(['2011', '2011', '2012', '2012', '2012', '2013', '2013']), 
np.array(['US', 'US', 'IN', 'IE', 'IE', 'JP', 'JP', 'GB']), 
np.array(['Red', 'Blue', 'Red', 'Red', 'Blue', 'Red', 'Blue', 'Blue'])] 

df = pd.DataFrame(np.random.rand(7, 1)*10, index=arrays, columns=['number']) 
df.index.names = ['Date', 'Country', 'Colour'] 
これは、次の答えを与えるだろう

答えて

3

短いバージョンは、次のようになります。

df.groupby(level=['Date', 'Country']).transform(lambda x: x/x.sum()) 

        number 
Date Country Colour   
2011 US  Red  0.400 
      Blue  0.600 
2012 IN  Red  1.000 
    IE  Red  0.500 
      Blue  0.500 
2013 JP  Red  0.375 
      Blue  0.625 
+1

これは完璧です - 私が探していた正確な答え!ありがとうございました! –

+0

間違いなく良いです。 – ayhan

+0

@ayhan、ありがとう:-) –

関連する問題