首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas:按日期分组并查找每个日期的最小n

Pandas:按日期分组并查找每个日期的最小n
EN

Stack Overflow用户
提问于 2018-07-24 04:31:10
回答 1查看 276关注 0票数 3

我有一个不同日期的数据帧,每个日期有一组ID。我想按日期分组,然后按该日期的某个列(数量)选择最小的3行。我正在尝试像下面这样的Pandas函数,但得到了多个错误。

这似乎是一个可行的split-apply-combine方法--你能帮我理解我哪里错了吗?

代码语言:javascript
复制
df.groupby(['OriginalAmount']).apply(nsmallest(2))
df.groupby(['OriginalAmount']).nsmallest(2).groupby(level='OriginalAmount')

下面是示例数据帧,以及当n_smallest等于2时我想要的输出

数据帧:

代码语言:javascript
复制
         Date  ID  Amount
0  2018-01-01  23       5
1  2018-01-01  45      10
2  2018-01-01  56      15
3  2018-01-02  23       5
4  2018-01-02  45      10
5  2018-01-02  99       3
6  2018-01-02  56      15
7  2018-01-03  23       3
8  2018-01-03  45       6
9  2018-01-03  56      19
10 2018-01-03  99       3

所需输出:

代码语言:javascript
复制
Date    ID  Amount
1/1/2018    23  5
1/1/2018    45  10
1/2/2018    99  3
1/2/2018    23  5
1/3/2018    23  3
1/3/2018    99  3
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-24 04:39:05

你表明你想要‘groupby’,但是你是按'OriginalAmount‘分组的,它甚至不是你的DataFrame中的一列。

虽然您可以使用nsmallest,但由于您想要设置原始日期的子集,因此您可以对Amount列进行排序,然后在根据“DataFrame”组成组之后只需调用.tail (或head)。如果您想要原始顺序,请按索引末尾排序。

代码语言:javascript
复制
df.sort_values('Amount').groupby('Date').head(2).sort_index()

输出:

代码语言:javascript
复制
          Date  ID  Amount
0   2018-01-01  23       5
1   2018-01-01  45      10
3   2018-01-02  23       5
5   2018-01-02  99       3
7   2018-01-03  23       3
10  2018-01-03  99       3
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51486807

复制
相关文章

相似问题

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