Python Pandas DataFrame:将列名匹配到行索引'

时间:2017-08-02 19:37:09

标签: python pandas

我有一个包含原始数据的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中的列数。

如何循环浏览列并以有效的方式应用标准化?

非常感谢

2 个答案:

答案 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())