【问题标题】:Find closest element in list for each row in Pandas DataFrame column为 Pandas DataFrame 列中的每一行查找列表中最接近的元素
【发布时间】:2023-02-08 18:41:56
【问题描述】:

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

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   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 执行此操作直接进入我的脑海,但我想知道如何以矢量化方式执行此操作。

【问题讨论】:

    标签: python pandas closest


    【解决方案1】:

    使用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
    

    【讨论】:

      猜你喜欢
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 2023-03-11
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      相关资源
      最近更新 更多