我有一个包含原始数据的DataFrame:
Var1 Var2 Var3
0 3090.032408 18.0 1545.016204
1 3048.781680 18.0 1524.390840
2 3090.032408 18.0 1545.016204
3 3112.086341 18.0 1556.043170
4 3075.100780 16.0 1537.550390
包含与我的第一个DataFrame中的变量相关的值的DataFrame:
minVal maxVal
Var1 3045 4000
Var2 15 19
Var3 1500 1583
对于DF1
中的每一列,我需要找到DF2
中的相关行,以便在我减去minVal并除以范围时应用标准化。 DF1
中的第1列可能与DF2
中的第1行无关 - DF2
中的行数多于DF1
中的列数。
如何循环浏览列并以有效的方式应用标准化?
非常感谢
答案 0 :(得分:2)
感谢Pandas的自动索引对齐,表达这种计算非常简单:
(DF1-DF2['minVal'])/(DF2['maxVal']-DF2['minVal'])
import pandas as pd
DF1 = pd.DataFrame({
'Var1': [3090.032408, 3048.78168, 3090.032408, 3112.086341, 3075.10078],
'Var2': [18.0, 18.0, 18.0, 18.0, 16.0],
'Var3': [1545.016204, 1524.39084, 1545.016204, 1556.04317, 1537.55039]})
DF2 = pd.DataFrame({'maxVal': [4000, 19, 1583,10], 'minVal': [3045, 15, 1500,11],
'A':[1,2,3,12], 'B':[5,6,7,13]},
index=['Var1', 'Var2', 'Var3','Var4'])
DF3 = DF2.loc[DF1.columns, :]
result = (DF1-DF3['minVal'])/(DF3['maxVal']-DF3['minVal'])
print(result)
产量
Var1 Var2 Var3
0 0.047154 0.75 0.542364
1 0.003960 0.75 0.293866
2 0.047154 0.75 0.542364
3 0.070247 0.75 0.675219
4 0.031519 0.25 0.452414
答案 1 :(得分:0)
这是获得所需内容的简单方法。计算每个列的最小值,最大值,范围
df2 = (df - df.min()) / (df.max() - df.min())