按 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

让我们尝试 groupbytransform

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']