2016-03-28 73 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