假设我有一个这样的日期框架:
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”列进行归一化。 我想做一个简单的最小-最大范数,如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
答案 0 :(得分: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())
答案 1 :(得分:1)
使用transform
df.C/=df.groupby(['B']).C.transform('max')