我在熊猫中有以下数据集:
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个项目的数据集。然后,我将在第二步中按提交日期分组,但是我不确定这是否是一个明智的解决方案。
答案 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'])