使用Python计算另一列分组的同一列连续行之间的差异

3
我有一个包含两列的数据框:UserProductCombo,OrderDates。每个用户/产品组有多个订单日期(每组1到5个日期)。
我已按降序排序以获取每个组的最近订单日期。
我想计算每个组订单日期之间的差异,并将其放入数据框中的新列中(以天为单位)。 (即OrderDate1-OrderDate2, OrderDate1-OrderDate3,OrderDate1-OrderDate4,OrderDate1-OrderDate5)。如果不到2个订单,则将其移动到下一组。 示例数据:
>>> bf_recency
        UserProduct               OrderDates
0   12111211/123232  2020-03-12 17:19:16.103
1   12111211/123232  2020-03-12 18:10:45.974
2   12111211/123232  2020-03-11 17:19:16.103
3   12111211/123232  2020-03-10 18:10:45.974
4   12111211/123232  2020-03-10 18:10:45.974
5   165870101/73066  2020-03-12 19:49:15.752

预期输出:

        UserProduct               diff(in days)
0   12111211/123232               N/A
1   12111211/123232               0
2   12111211/123232               1
3   12111211/123232               2
4   12111211/123232               2
5   165870101/73066               N/A

到目前为止,我已完成以下内容:
df_frequency =  df.groupby(["UserProduct"])['ORDER_DATE'].nlargest(5).reset_index(name ='OrderDates') 

df_frequency.sort_values(by=['OrderDates'],inplace=True, ascending=False)

df_freq = df_frequency.groupby(['UserProduct'])['OrderDates'].transform(lambda x: x.diff())  #STUCK HERE

你好,Ranjith。请阅读有关如何创建良好可重现的 Pandas 示例的内容。 - timgeb
@Ranjith 请提供一个样例输入和期望输出。这有助于更好地解释问题。 - Mayank Porwal
1
@MayankPorwal 我已经编辑了帖子,你现在可以看一下吗? - PyCharmer
@PyCharmer 这就是如何改进一个问题的正确方式!谢谢。 - timgeb
1个回答

2
你可以这样做:
In [500]: df                                                                                                                                                                                                
Out[500]: 
       UserProduct              OrderDates
0  12111211/123232 2020-03-12 17:19:16.103
1  12111211/123232 2020-03-12 18:10:45.974
2  12111211/123232 2020-03-11 17:19:16.103
3  12111211/123232 2020-03-10 18:10:45.974
4  12111211/123232 2020-03-10 18:10:45.974
5  165870101/73066 2020-03-12 19:49:15.752

In [575]: df['diff(in days)'] = 0
In [583]: grp = df.groupby('UserProduct')['OrderDates']
In [576]: for i, group in grp:  
     ...:     df["diff(in days)"][df.index.isin(group.index)] = group.sub(group.iloc[0])
     ...: 
In [581]: df['diff(in days)'] = df['diff(in days)'].dt.days.abs()                                                                                                                                           

In [582]: df                                                                                                                                                                                                
Out[582]: 
       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

嗨Mayank,但这是计算相邻日期之间的差异。我希望我的结果计算该组中第一行减去该列中所有其他行(如我的问题所示)。 - PyCharmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接