查找Pandas数据帧之间的最接近值

时间:2017-11-03 07:06:55

标签: python pandas dataframe match

我目前正在尝试生成几个关键人物的四分位数图。

我的四分位数在Pandas DataFrame中,如下所示:

BM

这是来自几百个用户的四分位映射 然后我查询我的sql数据库并获取One用户的值并将其加载到DF

                 0,05    0,1   0,25   0,33  
IndicatorName
indicator 1      10653  10512  10096   9857
indicator 2      2,85   2,87   3,01   3,11
indicator 3      1,66   1,75   1,84    1,9
indicator 4      13,01  11,78   8,55   7,64

我现在要做的是在我的第二个DF中创建一个新列,其中包含值所在的四分位数(最接近的匹配值):

                value
IndicatorName
indicator1      9917.00
indicator2      3.10
indicator3      1.86
indicator4      13.74

你会如何比较像这样的数据帧?

1 个答案:

答案 0 :(得分:1)

零步骤将,替换为.中的df1并转换为float

df1 = df1.replace(',','.', regex=True).astype(float)

或者:

df1 = pd.read_csv(file, decimal=',')

也是必要的匹配索引,因此如果只有空格是空格,请将其删除:

df1.index = df1.index.str.replace('\s+','')

然后按sub减去value列,获取abs值,并按DataFrame.idxmin查找最小值列:

df2['quartile'] = df1.sub(df2['value'],axis=0).abs().idxmin(axis=1)
print (df2)
                 value quartile
IndicatorName                  
indicator1     9917.00     0,33
indicator2        3.10     0,33
indicator3        1.86     0,25
indicator4       13.74     0,05

详细说明:

print (df1.sub(df2['value'],axis=0))
                 0,05     0,1    0,25   0,33
IndicatorName                               
indicator1     736.00  595.00  179.00 -60.00
indicator2      -0.25   -0.23   -0.09   0.01
indicator3      -0.20   -0.11   -0.02   0.04
indicator4      -0.73   -1.96   -5.19  -6.10

print (df1.sub(df2['value'],axis=0).abs())
                 0,05     0,1    0,25   0,33
IndicatorName                               
indicator1     736.00  595.00  179.00  60.00
indicator2       0.25    0.23    0.09   0.01
indicator3       0.20    0.11    0.02   0.04
indicator4       0.73    1.96    5.19   6.10