我有一个包含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
如果我很了解您的问题,您可以简单地做:
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。