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