2016-03-28 27 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分组)的总和,并创建一个新列在相同的数据框中。例如,我想一个数据帧,看起来像这样:

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。使用.transform('sum')的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