按日期将前n个值分组

时间:2019-12-12 11:00:19

标签: python pandas filter

我在熊猫中有以下数据集:

Item ID     Order Date
1           2019-09-01
2           2019-09-01
3           2019-09-01
...
2           2019-10-11
3           2019-10-11
3           2019-10-12

我想从整个数据集中检索排名前10位的订购商品,并按订购日期将其分组。有时候可能没有订购这些物品。

我可以通过dataset['Item ID'].value_counts().head(10)获得整个数据集的前10名。

dataset.groupby(['Order Date','Item ID']).count()可以获取给定日期的所有项目,但不能获取整个数据集的总top10以及给定日期订购的数量。

我尝试先过滤掉前10个项目的数据集。然后,我将在第二步中按提交日期分组,但是我不确定这是否是一个明智的解决方案。

1 个答案:

答案 0 :(得分:1)

首先根据top的索引值对Series.isin进行过滤,然后创建有序的Categorical,所以最后一个排序工作就像您需要的那样:

top = dataset['Item ID'].value_counts().head(10)

dataset = dataset[dataset['Item ID'].isin(top.index)]

dataset['Item ID'] = pd.Categorical(dataset['Item ID'], ordered=True, categories=top.index)

dataset = dataset.sort_values(['Order Date','Item ID'])