多列数据帧的各个值的归一化

问题描述 投票:1回答:1

我有一个包含100列x 72原始值的数据框。

df_3

                0        1        2               
first_point   458.69   457.71   420.82        
max_point    3654.07  8134.25  7520.39       
0             458.69   457.71   420.82         
1             437.92   339.23   287.35        
2             443.19   303.66   314.83        
3             416.03   315.33   317.84        
4             406.89   306.29   328.26        
5             419.13   334.01   325.01

对于从0、1、2、3开始的每一列...我想创建两个变量(nom和den)

  (for col0, row0) df_3[0][0] nom=458.69-first_point in col0 (458.69)
  (for col0, row1) df_3[0][1] nom=437.92-first_point in col0 (458.69)

  (for col0, row0) df_3[0][0] dem=max_point (3654.07)-first_point in col0 (458.69)
  the dem remains the same whithin the same column

我如何循环进行nom的运算,在该运算中,在对列的每一行进行值的减法迭代时,减法点保持固定不变?然后我在nom / dem之间进行除法

if dem !=0:
        norm = (nom / dem)
    else:
        norm = 0
    #we add the value to the final line
    final_line.append(norm)

col 0的输出将是:

   0
0  0
1 -0.0065
2 -0.0048508
3 -0.0133505
4 -0.0162735
5 -0.0123804
python dataframe calculation
1个回答
1
投票

如果我很了解您的问题,您可以简单地做:

for c in df.columns:
    first_point = df[c].values[0]
    max_point = max(df[c])
    dem = max_point - first_point
    if dem != 0:
        df['norm_' + str(c)] = (df[c] - first_point) / dem
    else:
        df['norm_' + str(c)] = 0

但是我想知道您是否在解释中混淆了不同的东西。如您在此处看到的,除法的分母具有取决于行的值,但是分母是固定的。在测试分母是否等于0的情况下,如果first_point == max_point,则会将整个列的值设置为0。

© www.soinside.com 2019 - 2024. All rights reserved.