计算 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
这是一个基本问题,在 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