怎样才能有效地做到PANDAS中Excel的MATCH函数(小于)?

excel中的MATCH函数允许一个可选参数集,它将返回小于给定值的最大值,或大于给定值的最小值。

假设我有一个DataFrame, x

 In [1]: x = pd.DataFrame(data=list(range(0, 11)), columns=["Obs"]) In [2]: x Out[2]: Obs 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 

还有一个数据框y

 In [3]: y = pd.DataFrame(data=[(-1, "Small"), (4, "Medium"), (7, "Large")], columns=["Obs", "Cat"]) In [4]: y Out[4]: Obs Cat 0 -1 Small 1 4 Medium 2 7 Large 

我怎样才能做一个match_type为1的INDEX-MATCH,这意味着它将经过Obs中的每个值,并返回与“Obs”相对应的“Cat”的值,这是最小的值比等于查找?

请注意,我想以某种vector化的方式做到这一点,而不是写一个自定义函数,并通过第二个DataFrame的行循环。 那将是相当低效的。

IIUC,你想要pd.merge_asof

 pd.merge_asof(x, y) 

另一种cut方法,不那么紧凑,但它可以让你自由地命令分类:

 pd.cut(x.Obs, y.Obs.tolist()+[np.inf], labels=y.Cat) Out[362]: 0 Small 1 Small 2 Small 3 Small 4 Small 5 Medium 6 Medium 7 Medium 8 Large 9 Large 10 Large Name: Obs, dtype: category Categories (3, object): [Small < Medium < Large]