以下是一个示例代码,演示如何按组对多列进行最小-最大归一化:
import pandas as pd
# 创建示例数据
data = {
'group': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'col1': [10, 20, 30, 40, 50, 60, 70, 80, 90],
'col2': [100, 200, 300, 400, 500, 600, 700, 800, 900]
}
df = pd.DataFrame(data)
# 按组对多列进行最小-最大归一化
normalized_cols = ['col1', 'col2']
for col in normalized_cols:
df[col] = df.groupby('group')[col].transform(lambda x: (x - x.min()) / (x.max() - x.min()))
print(df)
输出结果如下:
group col1 col2
0 A 0.000000 0.000000
1 A 0.500000 0.500000
2 A 1.000000 1.000000
3 B 0.000000 0.000000
4 B 0.500000 0.500000
5 B 1.000000 1.000000
6 C 0.000000 0.000000
7 C 0.333333 0.333333
8 C 1.000000 1.000000
在这个示例中,我们使用groupby
函数按照group
列进行分组。然后,我们使用transform
函数对每个分组中的列进行归一化计算。归一化公式为(x - x.min()) / (x.max() - x.min())
,其中x
表示每个分组中的列数据。最后,我们使用循环来遍历所有需要归一化的列,并将结果保存回原始数据帧中。