计算 Pandas 中列的权重

Calculate Weights of a Column in Pandas

这是一个基本问题,在 excel 中很容易做,但在 python 中没有想法,每个在线示例都在名称列中使用具有多个名称的 groupby。因此,我只需要来自单列的权重的行值。假设我有这样的数据:

        name    value
0       A       45
1       B       76
2       C       320
3       D       210

答案应该是这样的:

0      name     value  weights
1      A        45     0.069124
2      B        76     0.116743
3      C        320    0.491551
4      D        210    0.322581

谢谢,

使用 GroupBy.transform 每组重复 sum,因此可能划分原始列:

print (df.groupby('name')['value'].transform('sum'))
0    651
1    651
2    651
3    651
Name: value, dtype: int64

df['weights'] = df['value'].div(df.groupby('name')['value'].transform('sum'))
print (df)
  name  value   weights
0    A     45  0.069124
1    A     76  0.116743
2    A    320  0.491551
3    A    210  0.322581

编辑:

df['weights'] = df['value'].div(df['value'].sum())
print (df)
  name  value   weights
0    A     45  0.069124
1    B     76  0.116743
2    C    320  0.491551
3    D    210  0.322581

您也可以按 'name' 分组,然后应用一个函数,将每个值除以其组总和:

df['weights'] = df.groupby('name')['value'].apply(lambda x: x / x.sum())

输出:

  name  value   weights
0    A     45  0.069124
1    A     76  0.116743
2    A    320  0.491551
3    A    210  0.322581

对于新数据:

df['weights'] = df['value'] / df['value'].sum()

  name  value   weights
0    A     45  0.069124
1    B     76  0.116743
2    C    320  0.491551
3    D    210  0.322581