如何创建一个包含列表中最大值的新列,该列小于现有列中的单元格值?

Yay*_*Yay 3 python dataframe pandas

我有一个pandas数据框,看起来像:

     a   
0    0   
1   -2  
2    4  
3    1  
4    6  
Run Code Online (Sandbox Code Playgroud)

我也有一份清单

A = [-1, 2, 5, 7]
Run Code Online (Sandbox Code Playgroud)

我想添加一个名为"b"的新列,其中包含A中最大的值,该值小于"a"列中的单元格值.如果不存在这样的值,我希望'b'中的值为'X'.所以,目标是获得:

    a   b
0   0  -1
1  -2   X
2   4   2
3   1  -1
4   6   5
Run Code Online (Sandbox Code Playgroud)

我该如何实现这一目标?

WeN*_*Ben 5

有一个内置功能 merge_asof

s=pd.DataFrame({'a':A,'b':A})

pd.merge_asof(df.assign(index=df.index).sort_values('a'),s,on='a').set_index('index').sort_index().fillna('X')
Out[284]: 
       a  b
index      
0      0 -1
1     -2  X
2      4  2
3      1 -1
4      6  5
Run Code Online (Sandbox Code Playgroud)