假设我有以下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
同时用于索引和列。
答案 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