У меня есть фрейм данных с 3 столбцами «UserProduct», «OrderDates» (отсортированный от максимального до минимального по группам) и «diff» (разница между первой датой и каждой из других дат для этой конкретной группы).
Я хочу создать 3 счетчика в диапазоне '0-30', '30 -60 ', '60 -90'
По сути, я хочу классифицировать различия (по дням) столбец в соответствии с диапазоном (например: если diff находится в диапазоне «0-30», счетчик 1 получает голос «1»
Пример ниже:
Входные данные:
UserProduct OrderDates diff(in days)
0 12111211/123232 2020-03-12 17:19:16.103 0
1 12111211/123232 2020-03-12 18:10:45.974 0
2 12111211/123232 2020-03-11 17:19:16.103 1
3 12111211/123232 2020-03-10 18:10:45.974 2
4 12111211/123232 2020-03-10 18:10:45.974 2
5 165870101/73066 2020-03-12 19:49:15.752 0
6 165870101/73066 2020-02-11 19:49:15.752 31
Ожидаемый результат:
UserProduct OrderDates diff(in days) 0-30 30-60 60-90
0 12111211/123232 2020-03-12 17:19:16.103 0 1+1+1=3 - -
5 165870101/73066 2020-03-12 19:49:15.752 0 - 1 -
Во входных данных -> первое значение (OrderDates) для группа 12111211/123232 вычитается из последующих 4 (OrderDates), чтобы получить 0,1,2,2 (в днях)
На выходе -> для группы 12111211/123232, Только первая строка преобладает, а последующие значения diff (в днях) (все в диапазоне 0-30) способствуют тому, что первый счетчик получает 1 + 1 + 1 + 1 = 4
Мой код для получения на данный момент:
#to get top 5 records per user/product combination
bf_frequency = bf.groupby(["UserProduct"])['ORDER_DATE'].nlargest(5).reset_index(name ='OrderDates')
bf_frequency.sort_values(by=['OrderDates'],inplace=True, ascending=False)
bf_frequency['diff(in days)'] = 0
grp = bf_frequency.groupby('UserProduct')['OrderDates']
for i, group in grp:
bf_frequency['diff(in days)'][bf_frequency.index.isin(group.index)] = group.sub(group.iloc[0])
bf_frequency['diff(in days)']= bf_frequency['diff(in days)'].dt.days.abs()
У меня есть вывод, как показано во входных данных, но я хочу создать здесь счетчик