Pandas:根据另一列中存在的组对 0 到 10 之间的一列中的所有值进行标准化

问题描述

假设我有一个像这样的数据框:

    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。现在我想将每个 GroupValues 归一化为上限值共 10 个。

我尝试使用 pd.groupby 方法,但我不知道如何进一步进行。另外,我知道我可以使用 for 循环,但这会非常低效,因为我尝试处理的数据中有大约 2 万个样本。

有没有一种巧妙而微妙的方法可以做到这一点?

解决方法

您可以将 groupby 结合使用。 transformin 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)