我有两个系列,我希望用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)。 如何使用熊猫实现这一目标?
答案 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