我有一个包含3列“ UserProduct”,“ OrderDates”(从最大到最小,按组排序)和“ diff”(该特定组的第一个日期与每个其他日期之间的差)的数据框。
我想在'0-30','30-60','60-90'范围内创建3个计数器
基本上,我想根据范围对diff(以天为单位)列进行分类 (例如:如果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 -
在输入数据中->从随后的4个(OrderDates)中减去组12111211/123232的第一个值(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()
我的输出如输入数据所示,但希望从此处创建一个计数器