熊猫:按日期分组并找到每个日期的最小n

时间:2018-07-23 20:31:10

标签: python pandas group-by

我有一个具有不同日期的数据框,并且每个日期都有一组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

1 个答案:

答案 0 :(得分:7)

您表示要set today_date = date_format(date_sub(current_date, 1), 'YYYYMMdd') select account from table where data_date = today_date “日期”,然后按“ OriginalAmount”进行分组,而“ OriginalAmount”甚至没有出现在groupby中。

虽然您可以使用DataFrame,但是由于您想对原始nsmallest进行子集化,因此您可以对“金额”列进行排序,然后在形成组后调用。DataFrame(或开头)根据“日期”。如果要原始订单,请在索引末尾排序。

tail

输出:

df.sort_values('Amount').groupby('Date').head(2).sort_index()