pandas将范围内的值分配到类别

时间:2018-03-06 11:14:23

标签: python pandas

我有两个系列,我希望用s2中的分类索引替换s1中的值(总是从小到大排序)。应该返回第一个索引,其中s1的值大于s2的值:

s1 = pd.Series([-0.225, -0.5321, 0.2341, 0.467])
0   -0.2250
1   -0.5321
2    0.2341
3    0.4670

s2 = pd.Series(data=[-0.9, -0.6, -0.45, -0.2, 0.1, 0.3, 0.55, 0.9, 1.1, 1.4],index=list('ABCDEFGHIJ'))
A   -0.90
B   -0.60
C   -0.45
D   -0.20
E    0.10
F    0.30
G    0.55
H    0.90
I    1.10
J    1.40

预期产出:

0  C
1  B
2  E
3  F

这类似于excel中的VLOOKUP函数(使用范围查找= True)。 如何使用熊猫实现这一目标?

3 个答案:

答案 0 :(得分:1)

我认为需要cut

s1 = pd.Series([-0.225, -0.5321, 0.2341, 0.467, 1.8])


df = pd.cut(s1, bins=s2.append(pd.Series([np.inf])), labels=s2.index)
print (df)
0    C
1    B
2    E
3    F
4    J
dtype: category
Categories (10, object): [A < B < C < D ... G < H < I < J]

答案 1 :(得分:1)

pd.Series.searchsorted怎么样?

>>> s2.index[s2.searchsorted(s1) - 1]
Index(['C', 'B', 'E', 'F'], dtype='object')

答案 2 :(得分:0)

def comparer(value, data=s2):
    temp = data[data <= value].index
    return temp[-1]

In [100]: s1.apply(comparer)
Out[100]: 
0    C
1    B
2    E
3    F
dtype: object