python - Pandas:如何使用查询来选择最接近的值

标签 python pandas

我正在使用 Pandas 0.13.0,我尝试获取两个最接近的值,如下所示。

索引按递增且唯一的值排序。

import pandas as pd
import Quantities as pq

f = { 
    'A': [ 0.0,  0.1,  0.2,  0.5,  1.0] * pq.m,
    'B': [10.0, 11.0, 12.0, 15.0, 20.0] * pq.kPa,
    'C': [  a1,   b1,   c1,   d1,   e1]        
}

df = pd.DataFrame(f)

df.set_index(df['A'], inplace=True)

数据框给出:

in: print df

out:
      A       B         C
A                 
0.00  0.00 m  10.0 kPa  a1
0.10  0.10 m  11.0 kPa  b1
0.20  0.20 m  12.0 kPa  c1 
0.50  0.50 m  15.0 kPa  d1
1.00  1.00 m  20.0 kPa  e1

我有一个不在 A 列中的值:value_to_find = 0.15 m 。 该值在此过程中发生变化,因此我无法对其进行硬编码。

我尝试找到获得第一个值的最佳方法just before和值 just after value_to_find在栏目A ,然后返回列 AB 。然后插入 value_to_find 以获得 B值。

过滤后的结果:

      A       B       
A                 
0.10  0.10 m  11.0 kPa
0.20  0.20 m  12.0 kPa

插值之前选择正确值的一种方法是:

filter_before = '%s <= %f' % ( 'A', value_to_find)
filter_after = '%s >= %f' % ( 'A', value_to_find)

然后:

df_before = df.query(filter_before)
df_after = df.query(filter_after )

value_before = df_before.loc[df_before['A'].idxmax(), ['A', 'B']]
value_after = df_before.loc[df_before['A'].idxmin(), ['A', 'B']]

还有什么更好的办法吗?也许使用查询、 map 或类似的东西。

例如:filter_before = '%s <= %f | max(%s)' % ( 'A', value_to_find) (这个对我不起作用)

谢谢。

最佳答案

除非我误解了你的问题,否则我会在不使用查询的情况下获得你想要的输出:

value_to_find = 0.15
Min = df['A'] <= value_to_find
Max = df['A'] >= value_to_find
idx_Min = df.ix[Min, 'A'].idxmax()
idx_Max = df.ix[Max, 'A'].idxmin()
df.ix[idx_Min:idx_Max, ['A','B']]

       A   B
A           
0.1  0.1  11
0.2  0.2  12

我没有使用Quantities模块,但这不应该在这里发挥作用。 事实上,如果您找到与 value_to_find 完全匹配的内容,输出中将只有一行。

关于python - Pandas:如何使用查询来选择最接近的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26335732/

相关文章:

python - 对 pandas 的不同级别进行平均

python - 将冷却时间/计时器添加到 on_message [Discord.py]

python - 在两个方向的 pandas 列中填充 NaN

python - 如何在连接后重新索引 pandas DataFrame

javascript - 如何将 html View 数据或(Python)服务器数据传输到 Angular 或 Javascript?

python - 使用 argparse 解析 boolean 值

python - django 在模板中获取 kwargs 值

python - 使用具有空列表属性的 pandas.io.json.json_normalize()

pandas - 矢量化 pandas 申请 pd.date_range

python - Groupby 并使用自定义函数执行逐行计算