Pandas:基于另一列中存在的组规范化一列中0到10之间的所有值

2024-09-27 19:18:53 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个数据帧,如:

    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, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3], 'Values': [1, 4, 2, 7, 3, 4, 1, 5, 12, 4, 10, 2, 6, 20, 15]})

请注意,在数据帧中,组1的最大值为7,而组2的最大值为12,组3的最大值为20。现在我想将每个GroupValues规范化为10的上限值

我试图使用pd.groupby方法,但我对如何继续下去没有任何线索。另外,我知道我可以使用for循环,但这将是非常低效的,因为我试图处理的数据中有大约20k个样本

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


Tags: 数据方法dataframedfforgroup规范化pd
1条回答
网友
1楼 · 发布于 2024-09-27 19:18:53

为此,可以使用groupbytransform。有一个类似的例子in the docs{}:

import pandas as pd

df = pd.DataFrame({'Group': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3], 'Values': [1, 4, 2, 7, 3, 4, 1, 5, 12, 4, 10, 2, 6, 20, 15]})

df['normal'] = df.groupby('Group').transform(lambda x: (x / x.max()) * 10)

print(df)

印刷品:

    Group  Values     normal
0       1       1   1.428571
1       1       4   5.714286
2       1       2   2.857143
3       1       7  10.000000
4       1       3   4.285714
5       2       4   3.333333
6       2       1   0.833333
7       2       5   4.166667
8       2      12  10.000000
9       2       4   3.333333
10      2      10   8.333333
11      3       2   1.000000
12      3       6   3.000000
13      3      20  10.000000
14      3      15   7.500000

相关问题 更多 >

    热门问题