Вам нужно groupby
в течение дней и продуктов, а затем использовать size
. Как только вы это сделаете, у вас будет все количество в df
, которое вам требуется.
Затем вам нужно будет отсортировать как day
, так и столбец 0
по умолчанию, который теперь содержит ваши значения. Это было создано путем сброса индекса на начальный groupby
.
* 1010. * Мы следуем инструкциям в
Pandas получаем самые верхние n записей в каждой группе , чтобы получить желаемый результат.
Полный пример:
Настройка:
df = pd.DataFrame({'day':[1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3],
'value':['a','a','b','b','b','c','a','a','b','b','b','c','a','a','b','b','b','c']})
df.head(6)
day value
0 1 a
1 1 a
2 1 b
3 1 b
4 1 b
5 1 c
df_counts = df.groupby(['day','values']).size().reset_index().sort_values(['day', 0], ascending = [True, False])
df_top_2 = df_counts.groupby('day').head(2)
df_top_2
day value 0
1 1 b 3
0 1 a 2
4 2 b 3
3 2 a 2
7 3 b 3
6 3 a 2
Конечно, вы должны переименовать столбец 0
во что-то еще разумно, но это минимальный пример.