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