首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas group-by选择最近的数字

Pandas group-by选择最近的数字
EN

Stack Overflow用户
提问于 2021-06-20 08:10:46
回答 2查看 29关注 0票数 0

假设我有以下数据帧:

代码语言:javascript
复制
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

结果如下所示:

代码语言:javascript
复制
    store   code     range  
0     s1      b        2           
1     s2      a        3              

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-20 08:15:34

尝试从range中减去n值,然后在df['store']上使用groupby idxmin获得每个商店的min值的索引

代码语言:javascript
复制
n = 3
new_df = (
    df.loc[(df['range'] - n).abs().groupby(df['store']).idxmin()]
        .reset_index(drop=True)
)
代码语言:javascript
复制
  store code  range
0    s1    b      2
1    s2    a      3
票数 2
EN

Stack Overflow用户

发布于 2021-06-20 08:15:07

尝试:

代码语言:javascript
复制
n = 3
df.loc[df.assign(diff=(df['range']-n).abs()).groupby('store')['diff'].idxmin()]

输出:

代码语言:javascript
复制
  store code  range
1    s1    b      2
2    s2    a      3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68051653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档