python - 计算同一列之间的差异,在python中由另一列分组的连续行
问题描述
我有一个包含 2 列的数据框:UserProductCombo、OrderDates。我为每个用户/产品组有多个订单日期(每组 1 到 5 个日期)。
我已按降序对数据进行排序,以获得每个组的最高订单日期。
我想计算每个组的订单日期之间的差异,并将它们放在我的数据框中的一个新列中(IN DAYS)。
(即 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
解决方案
你可以这样做:
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
推荐阅读
- javascript - Javascript 模板文字中的日期格式
- apache-kafka - 如何在 Kafka Streams 应用程序中预热内存状态存储
- spring-boot - WebFlux + MongoDB + docker compose = 错误
- tensorflow - TfLite:为什么推荐 from_saved_model() 而不是 from_keras_model()?
- node.js - 将 node.js 加密代码转换为 dart
- android - 是否可以将多个 Recyclerview 拼接到一个 Recyclerview 中?
- python - PyInstaller 4. 仅在一台机器上从子进程启动 Maya 2020 时出现 4 Qt 平台错误
- javascript - 在哪里可以找到以太坊操作码的代码规定(Javascript)
- excel - 使用 Excel 公式从 Bloomberg 获取 Code Isin
- kotlin - 如何在 Kotlin 中使用 Firebase Phone Auth 登录时检查用户是否已经存在?