我使用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)
DataFrame提供:
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
的最佳方法,然后返回列{{1} }和A
。然后插值value_to_find以获取B
值。
结果将在过滤后:
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']]
(这个对我不起作用)
感谢。
答案 0 :(得分:5)
除非我误解了您的问题,否则我会在不使用query
的情况下获得您想要的输出:
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
完全匹配的内容,则输出中只会有一行。