首页 > 解决方案 > 熊猫分组选择最接近的数字

问题描述

假设我有以下数据框:

d = {'store': ['s1', 's1', 's2', 's2',], 'code': ['a', 'b', 'a', 'b'], 'range': [1, 2, 3,2]}
    df = pd.DataFrame(data=d)


print(df)
    store   code     range  
0     s1      a        1           
1     s1      b        2              
3     s2      a        3           
4     s2      b        2           

对于每个商店,我想选择范围最接近所选值 n 的代码,例如让我们说 n=3

结果如下:

    store   code     range  
0     s1      b        2           
1     s2      a        3              

需要注意的一些小细节,在实际数据集中范围不是一个整数,而是一个双精度数,每个存储有三个代码(a,b,c),为了简单起见,这里只显示两个。

标签: pythonpandasdataframegroup-by

解决方案


尝试使用on减去该n值并获取每个商店range的值的索引:mingroupby idxmindf['store']

n = 3
new_df = (
    df.loc[(df['range'] - n).abs().groupby(df['store']).idxmin()]
        .reset_index(drop=True)
)
  store code  range
0    s1    b      2
1    s2    a      3

推荐阅读