首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >过滤熊猫数据-顶部和底部N行

过滤熊猫数据-顶部和底部N行
EN

Stack Overflow用户
提问于 2021-12-01 22:25:19
回答 2查看 1.3K关注 0票数 1

我有一个熊猫的日期和价值的数据。

代码语言:javascript
运行
复制
import pandas as pd
df = pd.DataFrame({'date':['11-10','11-10','11-10','12-10','12-10','12-10'],
                   'id': [1, 1, 2, 1, 1, 2],
                   'val':[20, 30, 40, 50, 25, 35] })

我希望过滤器DataFrame只包括每个日期的顶部和底部N行。假设N= 2,那么,dataframe将丢弃第1行11-10 20和第5行12-10 25

希望找到一种能够针对不同N值的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-01 22:28:50

您可以按date对数据进行分组,然后为val列调用nlargest,传递N的值

代码语言:javascript
运行
复制
>>> df.groupby('date')['val'].nlargest(2)
date    
11-10  2    40
       1    30
12-10  3    50
       5    35
Name: val, dtype: int64

如果需要,可以在结果系列上调用to_frame()将其转换为数据格式。

对于更新的问题,您仍然可以通过一些额外的工作来实现上面的代码,以获得ids,然后与原始的dataframe进行内部合并:

代码语言:javascript
运行
复制
out= (df.set_index('id')
        .groupby(['date'])['val']
        .nlargest(2)
        .to_frame('val')
        .reset_index()
        .merge(df, how='inner')
      )

输出:

代码语言:javascript
运行
复制
    date  id  val
0  11-10   2   40
1  11-10   1   30
2  12-10   1   50
3  12-10   2   35
票数 1
EN

Stack Overflow用户

发布于 2021-12-01 23:04:24

一种选择是对列进行排序,并在groupby上取尾:

代码语言:javascript
运行
复制
(df.sort_values(['date', 'val'])
   .groupby('date', sort = False)
   .tail(n=2)
)
    date  id  val
1  11-10   1   30
2  11-10   2   40
5  12-10   2   35
3  12-10   1   50
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70192012

复制
相关文章

相似问题

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