2016-03-28 9 views
1

を作成するために、カラムとインデックスを使用して、合計が、私は、次のデータフレームがあるとします。GROUPBYは、新しい列

import pandas as pd 

group = ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'] 
df = {'population': [100,200,300,400,500,600,700,800], 
     'city_name': ['Chicago', 'Chicago', 'New York', 'New York', 'Chicago', 'New York', 'Chicago', 'New York'], 
    } 
df = pd.DataFrame(df, index=group) 


    city_name population 
A Chicago  100 
A Chicago  200 
A New York  300 
A New York  400 
B Chicago  500 
B New York  600 
B Chicago  700 
B New York  800 

私は(インデックスとCITY_NAMEでグループ化された)人口の合計を取り、新しい列を作成したいです同じデータフレーム内にある。例えば、私はこのようになりますDATAFRAMEたい:

city_name population population_summed 
A Chicago  100    300 
A Chicago  200    300 
A New York  300    700 
A New York  400    700 
B Chicago  500    1200 
B New York  600    1400 
B Chicago  700    1200 
B New York  800    1400 

を、私はトラブルのビットを持っていた理由は、私は、インデックスと列の両方でgroupbyを使用するかどうかはわかりませんということです。

答えて

2

[df.index, 'city_name']を使用して、インデックスと列の両方をgroupbyに渡すことができます。

df['population_summed'] = df.groupby([df.index, 'city_name'])['population'].transform('sum') 

これが与える:

city_name population population_summed 
A Chicago   100    300 
A Chicago   200    300 
A New York   300    700 
A New York   400    700 
B Chicago   500    1200 
B New York   600    1400 
B Chicago   700    1200 
B New York   800    1400 
値の新しいシリーズを作成するために、GROUPBYオブジェクトに .transform('sum')を使用します