首页 > 解决方案 > 如何创建一个包含列表中最大值的新列,该列表小于现有列中的单元格值?

问题描述

我有一个看起来像的熊猫数据框:

     a   
0    0   
1   -2  
2    4  
3    1  
4    6  

我也有清单

A = [-1, 2, 5, 7]

我想添加一个名为“b”的新列,其中包含 A 中小于“a”列中单元格值的最大值。如果不存在这样的值,我希望“b”中的值为“X”。因此,目标是获得:

    a   b
0   0  -1
1  -2   X
2   4   2
3   1  -1
4   6   5

我如何实现这一目标?

标签: pythonpandasdataframe

解决方案


有一个内置函数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

推荐阅读