在 python 中将 pandas 列值从 0 缩放到 1

Scaling pandas column value from 0 to 1 in python

假设,我有以下数据框。

Frequency  
20
14
10
8
6
2
1

我想将 Frequency 值从 0 缩放到 1。

在 Python 中有没有办法做到这一点?我发现了类似的东西 但它不符合我的目的。

我确信 Python 中有更标准的方法来执行此操作,但我使用自定义函数,您可以 select 缩放范围:

def my_scaler(min_scale_num,max_scale_num,var):
    return (max_scale_num - min_scale_num) * ( (var - min(var)) / (max(var) - min(var)) ) + min_scale_num

# You can input your range
df['scaled'] = my_scaler(0,1,df['Frequency'].astype(float)) # scaled between 0,1
df['scaled2'] = my_scaler(-5,5,df['Frequency'].astype(float)) # scaled between -5,5

df

   Frequency    scaled   scaled2
0         20  1.000000  5.000000
1         14  0.684211  1.842105
2         10  0.473684 -0.263158
3          8  0.368421 -1.315789
4          6  0.263158 -2.368421
5          2  0.052632 -4.473684
6          1  0.000000 -5.000000

您可以使用 applymap 对 df 的每个单元格应用任何函数。

例如:

df = pd.DataFrame([20, 14, 10, 8, 6, 2, 1], columns=["Frequency"])
min = df.min()
max = df.max()
df2 = df.applymap(lambda x: (x - min)/(max-min))

df
   Frequency
0         20
1         14
2         10
3          8
4          6
5          2
6          1

df2
0       Frequency    1.0
dtype: float64
1  Frequency    0.684211
dtype: float64
2  Frequency    0.473684
dtype: float64
3  Frequency    0.368421
dtype: float64
4  Frequency    0.263158
dtype: float64
5  Frequency    0.052632
dtype: float64
6       Frequency    0.0
dtype: float64

只需将 中的 a, b = 10, 50 更改为 a, b = 0, 1 以获取比例的上限值和下限值:

a, b = 0, 1
x, y = df.Frequency.min(), df.Frequency.max()
df['normal'] = (df.Frequency - x) / (y - x) * (b - a) + a
print (df)
   Frequency    normal
0         20  1.000000
1         14  0.684211
2         10  0.473684
3          8  0.368421
4          6  0.263158
5          2  0.052632
6          1  0.000000