首页 > 解决方案 > 在熊猫中按日期对前 n 个值进行分组

问题描述

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

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 个订购商品,并按订购日期对它们进行分组。有时可能会发生这些物品尚未订购的情况。

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

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

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

标签: pythonpandasfilter

解决方案


想法是首先Series.isin按索引值过滤top,然后创建有序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'])

推荐阅读