问题描述
Group Values
0 1 1
1 1 4
2 1 2
3 1 7
4 1 3
5 2 4
6 2 1
7 2 5
8 2 12
9 2 4
10 2 10
11 3 2
12 3 6
13 3 20
14 3 15
MRE:
df = pd.DataFrame({'Group': [1,1,2,3,3],'Values': [1,4,7,5,12,10,6,20,15]})
在数据框中注意,第 1 组的最大值为 7,而第 2 组有 12 个,第 3 组有 20。现在我想将每个 Group
的 Values
归一化为上限值共 10 个。
我尝试使用 pd.groupby
方法,但我不知道如何进一步进行。另外,我知道我可以使用 for
循环,但这会非常低效,因为我尝试处理的数据中有大约 2 万个样本。
有没有一种巧妙而微妙的方法可以做到这一点?
解决方法
您可以将 与
groupby
结合使用。 transform
的 in the docs 有一个类似的例子:
transform()
打印:
import pandas as pd
df = pd.DataFrame({'Group': [1,1,2,3,3],'Values': [1,4,7,5,12,10,6,20,15]})
df['normal'] = df.groupby('Group').transform(lambda x: (x / x.max()) * 10)
print(df)