计数器根据一列中另一列分组的值来计算频率范围

时间:2020-04-07 12:06:57

标签: python python-3.x pandas group-by jupyter-notebook

我有一个包含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() 

我的输出如输入数据所示,但希望从此处创建一个计数器

0 个答案:

没有答案