查找Pandas DataFrame列中每行的列表中最近的元素

iqxoj9l9  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(123)

我有一个PandasDataFrame和比较列表,如下所示:

In [21]: df
Out[21]: 
   Results
0       90
1       80
2       70
3       60
4       50
5       40
6       30
7       20
8       10

In [23]: comparation_list
Out[23]: [83, 72, 65, 40, 36, 22, 15, 12]

现在,我想在这个df上创建一个新列,其中每行的值是比较列表中最接近Results列对应行的元素。
输出应该如下所示:

Results   assigned_value
0       90               83
1       80               83
2       70               72
3       60               65
4       50               40
5       40               40
6       30               36
7       20               22
8       10               12

通过循环或使用apply来执行此操作直接出现在我的脑海中,但我想知道如何以矢量化的方式来执行此操作。

qv7cva1a

qv7cva1a1#

使用merge_asof

out = pd.merge_asof(
    df.reset_index().sort_values(by='Results'),
    pd.Series(sorted(comparation_list), name='assigned_value'),
    left_on='Results', right_on='assigned_value',
    direction='nearest'
).set_index('index').sort_index()

输出:

Results  assigned_value
index                         
0           90              83
1           80              83
2           70              72
3           60              65
4           50              40
5           40              40
6           30              36
7           20              22
8           10              12

相关问题