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

2024-05-13 12:40:14 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下数据帧:

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   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与索引和列一起使用。你知道吗


Tags: 数据nameimportcitydataframepandasdfnew
1条回答
网友
1楼 · 发布于 2024-05-13 12:40:14

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

相关问题 更多 >