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

Groupby using column and index and then sum to create new column

假设我有以下 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

您可以使用 [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