将列除以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

让我们用transform试试groupby

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

最新更新