我目前正在尝试生成几个关键人物的四分位数图。
我的四分位数在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
你会如何比较像这样的数据帧?
答案 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