作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下数据框
Name X
Jack 2
Ann 4
John 18
以及下面的查找表
X_Min X_Max Y
2 2
3 7 4
8 15 9
16 25
其中X_Min
和X_Max
是第一个数据帧中查找值X的范围。我想将查找表应用于我的数据框以获得下面的结果
Name X Y(Targeted)
Jack 2 2
Ann 4 4
John 18 25
非常感谢
最佳答案
使用IntervalIndex
将 X_Min
中第一个未定义的值替换为 -inf
,并将 np.inf
的最后一个 X_Max
缺失值替换为:
print (df2)
X_Min X_Max Y
0 NaN 2.0 2
1 3.0 7.0 4
2 8.0 15.0 9
3 16.0 NaN 25
i = pd.IntervalIndex.from_arrays(df2['X_Min'].fillna(-np.inf),
df2['X_Max'].fillna(np.inf), 'both')
print (i)
IntervalIndex([[-inf, 2.0], [3.0, 7.0], [8.0, 15.0], [16.0, inf]],
closed='both',
dtype='interval[float64]')
可能的过滤值是 DataFrame.loc
:
df1['Y(Targeted)'] = df2.set_index(i).loc[df1['X'], 'Y'].values
print (df1)
Name X Y(Targeted)
0 Jack 2 2
1 Ann 4 4
2 John 18 25
编辑:
如果只想使用 X_Max
列:
i = pd.IntervalIndex.from_arrays(df2['X_Max'].add(1).shift().fillna(-np.inf),
df2['X_Max'].fillna(np.inf), 'both')
print (i)
IntervalIndex([[-inf, 2.0], [3.0, 7.0], [8.0, 15.0], [16.0, inf]],
closed='both',
dtype='interval[float64]')
关于python - 如何在 pandas 数据框上应用范围查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58536707/
我是一名优秀的程序员,十分优秀!