按 Pandas 中的数据子集总和划分列
Divide Column by Sum of Data Subset in Pandas
我有一个 pandas DataFrame,如下所示:
pd.DataFrame({'ID': {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E'}, 'Count': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}, 'Group': {0: 'A', 1: 'A', 2: 'A', 3: 'B', 4: 'B'}})
看起来像这样:
Change Count Group
0 A 1 A
1 B 2 A
2 C 3 A
3 D 4 B
4 E 5 B
我想按 Group
列分组,找到该子集的 Count
列中所有计数的总和,然后创建一个新列 Proportion
这是计算方式为该子集的 Count
列中的值除以该子集的总和。
结果应该是这样的:
pd.DataFrame({'Change': {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E'}, 'Count': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}, 'Group': {0: 'A', 1: 'A', 2: 'A', 3: 'B', 4: 'B'}, 'Proportion': {0: 0.167, 1: 0.333, 2: 0.5, 3: 0.444, 4: 0.555}})
看起来像这样:
Change Count Group Proportion
0 A 1 A 0.167
1 B 2 A 0.333
2 C 3 A 0.500
3 D 4 B 0.444
4 E 5 B 0.555
让我们尝试 groupby
和 transform
df['new'] = df['Count'].div(df.groupby('Group')['Count'].transform('sum'))
df
Out[176]:
Change Count Group new
0 A 1 A 0.166667
1 B 2 A 0.333333
2 C 3 A 0.500000
3 D 4 B 0.444444
4 E 5 B 0.555556
我会按照以下步骤操作:
- 获取组总计:
groups = df[['Group', 'Count']].groupby('Group').sum().reset_index()
- 将 df 与组合并,使每一行都有组总数:
df = pd.merge(df, groups, on='Group')
- 计算比例:
df['Proportion'] = df['Count'] / df['sum']
我有一个 pandas DataFrame,如下所示:
pd.DataFrame({'ID': {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E'}, 'Count': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}, 'Group': {0: 'A', 1: 'A', 2: 'A', 3: 'B', 4: 'B'}})
看起来像这样:
Change Count Group
0 A 1 A
1 B 2 A
2 C 3 A
3 D 4 B
4 E 5 B
我想按 Group
列分组,找到该子集的 Count
列中所有计数的总和,然后创建一个新列 Proportion
这是计算方式为该子集的 Count
列中的值除以该子集的总和。
结果应该是这样的:
pd.DataFrame({'Change': {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E'}, 'Count': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}, 'Group': {0: 'A', 1: 'A', 2: 'A', 3: 'B', 4: 'B'}, 'Proportion': {0: 0.167, 1: 0.333, 2: 0.5, 3: 0.444, 4: 0.555}})
看起来像这样:
Change Count Group Proportion
0 A 1 A 0.167
1 B 2 A 0.333
2 C 3 A 0.500
3 D 4 B 0.444
4 E 5 B 0.555
让我们尝试 groupby
和 transform
df['new'] = df['Count'].div(df.groupby('Group')['Count'].transform('sum'))
df
Out[176]:
Change Count Group new
0 A 1 A 0.166667
1 B 2 A 0.333333
2 C 3 A 0.500000
3 D 4 B 0.444444
4 E 5 B 0.555556
我会按照以下步骤操作:
- 获取组总计:
groups = df[['Group', 'Count']].groupby('Group').sum().reset_index()
- 将 df 与组合并,使每一行都有组总数:
df = pd.merge(df, groups, on='Group')
- 计算比例:
df['Proportion'] = df['Count'] / df['sum']