在pandas中使用石斑鱼和groupby没有获得每月的top5值

时间:2018-04-23 14:48:42

标签: pandas

我试图获取每月金额的前5个值以及文本列。我已尝试重新取样分组声明

数据集:

text       amount      date
123…        11.00   11-05-17    
123abc…     10.00   11-08-17
Xyzzy…      22.00.  12-07-17
Xyzzy…      221.00.  11-08-17
Xyzzy…      212.00.  10-08-17
Xyzzy…      242.00.  18-08-17

代码:

df1 = df.groupby([’text', pd.Grouper(key=‘date', freq='M')])[‘amount'].apply(lambda x: x.nlargest(5))

我获得了一组文本,但没有按月排列,也没有按降序排列的最大值。

df1 = df.groupby([pd.Grouper(key=‘date', freq='M')])[‘amount'].apply(lambda x: x.nlargest(5))

这些代码工作正常但不提供文本列。

2 个答案:

答案 0 :(得分:2)

您可以将headsort_values

一起使用
df1 = df.sort_values('amount',ascending=False).groupby(['text', pd.Grouper(key='date', freq='M')]).head(2)

答案 1 :(得分:2)

假设amount是数字列:

In [8]: df.groupby(['text', pd.Grouper(key='date', freq='M')]).apply(lambda x: x.nlargest(2, 'amount'))
Out[8]:
                         text  amount       date
text    date
123abc… 2017-11-30 1  123abc…    10.0 2017-11-08
123…    2017-11-30 0     123…    11.0 2017-11-05
Xyzzy…  2017-08-31 5   Xyzzy…   242.0 2017-08-18
        2017-10-31 4   Xyzzy…   212.0 2017-10-08
        2017-11-30 3   Xyzzy…   221.0 2017-11-08
        2017-12-31 2   Xyzzy…    22.0 2017-12-07