1

假设我有以下数据框:

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索引和列。

4

1 回答 1

2

您可以将索引和列都传递给 groupby [df.index, 'city_name']。在 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
于 2016-03-28T16:55:15.537 回答