我有一个不同日期的数据帧,每个日期有一组ID。我想按日期分组,然后按该日期的某个列(数量)选择最小的3行。我正在尝试像下面这样的Pandas函数,但得到了多个错误。
这似乎是一个可行的split-apply-combine方法--你能帮我理解我哪里错了吗?
df.groupby(['OriginalAmount']).apply(nsmallest(2))
df.groupby(['OriginalAmount']).nsmallest(2).groupby(level='OriginalAmount')下面是示例数据帧,以及当n_smallest等于2时我想要的输出
数据帧:
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所需输出:
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发布于 2018-07-24 04:39:05
你表明你想要‘groupby’,但是你是按'OriginalAmount‘分组的,它甚至不是你的DataFrame中的一列。
虽然您可以使用nsmallest,但由于您想要设置原始日期的子集,因此您可以对Amount列进行排序,然后在根据“DataFrame”组成组之后只需调用.tail (或head)。如果您想要原始顺序,请按索引末尾排序。
df.sort_values('Amount').groupby('Date').head(2).sort_index()输出:
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 3https://stackoverflow.com/questions/51486807
复制相似问题