python - 在 Pandas 数据帧之间寻找最接近的值

标签 python pandas dataframe match

我目前正在尝试生成一些关键数据的四分位图。

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

                 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

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

                value
IndicatorName
indicator1      9917.00
indicator2      3.10
indicator3      1.86
indicator4      13.74

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

                value     quartile
IndicatorName
indicator1      9917.00   0,33
indicator2      3.10      0,33
indicator3      1.86      0,25
indicator4      13.74     0,05

您将如何比较这样的数据帧?

最佳答案

零步是将 , 替换为 . in 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

关于python - 在 Pandas 数据帧之间寻找最接近的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47090233/

相关文章:

Python - 如何直接从 Smartsheets 创建 pandas Dataframe?

python - Pandas:消除循环

python - 如何重新实现 QGraphicsPixmapItem 的 itemChange 和 mouseMoveEvent?

python - Sun Grid Engine,强制每个节点执行一项作业

python - Kivy anchor 和网格布局居中

python - 当列中包含 '?' 时,Pandas 无法选择

python - Pandas 将 float 转换为没有小数的字符串

Python - 如何将 while 循环中的值存储到 pandas 数据框中?

python - 如果列中的值匹配,则合并 Pandas 数据框

python - 有效获取 3D NumPy 数组的第 i 个 2D 切片的第 i 列,对于所有 i