python-3.x - 如何按列分组并进行标准化?
问题描述
假设我有这样的日期框架:
A B C
0 foo one 1
1 bar one 2
2 foo two 1
3 bar three 2
4 foo two 3
5 bar two 5
6 foo one 2
7 foo three 5
8 bar one 4
我想按“B”分组并对每个特定“B”的“C”列进行规范化。我想做一个简单的 min-max norm 像 x / max(x)
grouped_b = df.groupby('B')
def norm(value):
return value/value.max()
norm_B = grouped_b['C'].agg(norm)
结果如下所示:
A B C
0 foo one 0.25
1 bar one 0.5
2 foo two 0.2
3 bar three 0.25
4 foo two 0.6
5 bar two 1
6 foo one 0.5
7 foo three 1
8 bar one 1
解决方案
用于与原始尺寸相同GroupBy.transform
的退货:Series
df
grouped_b = df.groupby('B')
def norm(value):
return value/value.max()
df['C'] = grouped_b['C'].transform(norm)
print (df)
A B C
0 foo one 0.25
1 bar one 0.50
2 foo two 0.20
3 bar three 0.40
4 foo two 0.60
5 bar two 1.00
6 foo one 0.50
7 foo three 1.00
8 bar one 1.00
您还可以使用lambda
功能:
df['C'] = df.groupby('B')['C'].transform(lambda x: x / x.max())