【问题标题】:Pandas find the nearest value for in a column熊猫在列中找到最接近的值
【发布时间】:2020-10-23 11:31:58
【问题描述】:

我有下表:

   year   pop1     pop2
0   0    100000    100000
1   1    999000    850000
2   2    860000    700000
3   3    770000    650000

我想为每个pop (pop1 ,pop2) 查找pop 最接近给定数字的年份,例如pop 最接近830000 的年份。

有没有办法根据给定的值找到列内最近的值?

我看过这篇文章(How do I find the closest values in a Pandas series to an input number?_ 但似乎这里的结果在上面和下面,我想最后只得到一个数字。

*我没有代码示例,因为我没有找到任何参数可以用来获取最近的

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    year 列转换为索引,然后减去值,得到绝对值,最后一个索引(这里是年份)按最接近的值 - 这里是DataFrame.idxmin 的最小值:

    val = 830000
    
    s = df.set_index('year').sub(val).abs().idxmin()
    print (s)
    pop1    2
    pop2    1
    dtype: int64
    

    【讨论】:

    • 能否请您详细说明 sub() 和 abs() 部分?比如我们为什么要减去人口规模以及从什么中减去?不确定我是否理解这部分,虽然它有效。谢谢:)
    • @Reut - 当然,我们需要 val 的所有值的差异,所以使用 sub 进行减法,然后得到正值和负值,因为像 830010 - 830000 = 10820090 - 830000 = -10 所以需要绝对值查找最小的值更大或更少的行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 2021-10-06
    • 2021-12-28
    • 2022-10-16
    相关资源
    最近更新 更多