Home > OS >  Find the nearest number(but not exceed) in the list and change numbers in the series(Python)
Find the nearest number(but not exceed) in the list and change numbers in the series(Python)

Time:02-05

there is a series like below

s = pd.Series([25, 33, 39])

0    25
1    33
2    39
dtype: int64

and a list

list = [5, 10, 20, 26, 30, 31, 32, 35, 40]

[5, 10, 20, 26, 30, 31, 32, 35, 40]

I'd like to find the nearest number in the list and **change the number **in the series

for example first number is the series is 25 but the list is [5, 10, 20, 26, 30, 31, 32, 35, 40]

so the firtst nearest number(corresponding to 25 in the series) is 20 (Actually 26 is nearest number, but I need a number less than 25)

and then the second number is 31, thrid is 35 after finding the number and change that in the series

desired out s is

0    20
1    31
2    35

please give me advice. It's a very important task for me. if possilbe? without for loop plz

Find the nearest number(but not exceed) in the list and change numbers in the series(Python)

CodePudding user response:

You are looking for merge_asof:

s = pd.Series([25, 33, 39], name="s")
l = pd.Series([5, 10, 20, 26, 30, 31, 32, 35, 40], name="l")

pd.merge_asof(s, l, left_on="s", right_on="l")

A few notes:

  • There is a bug in your expected output. The closest number to 33 is 32.
  • Don't name your variable list. It overwrites the name of a very common Python class.
  • Make sure l is sorted.
  • Related