Groupby使用列和索引然后求和来创建新列

时间:2016-03-28 16:52:08

标签: python pandas dataframe pandas-groupby

假设我有以下DataFrame:

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同时用于索引和列。

1 个答案:

答案 0 :(得分:2)

您可以使用[df.index, 'city_name']将索引和列传递给groupby。在groupby对象上使用.transform('sum')来创建新的值系列:

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