我正在研究用户流失预测用例,这是数据集的一部分(简短版本)
ID Timestamp
0 026 2017-07-01
1 026 2017-08-01
2 026 2017-09-01
3 026 2017-10-01
4 026 2017-11-01
... ... ...
283 327 2019-05-01
284 327 2019-06-01
285 327 2019-07-01
... ... ...
528 500 2018-01-01
529 500 2018-02-01
例如,观察期是开始日期2017-07-01到2019-12-01首先,我必须找到所有第一个日期都大于观察期开始日期的用户(2017-07-01 ),然后移动它们的所有行,以便第一行以观察期的日期开始。
例如,ID 026从观察期开始就处于活动状态,所以没关系-他没有任何变换。
但是ID 237和ID 500在观察期开始之后才开始活动,我应该从该点开始移动所有日期(行)
转换后的数据框应该看起来像
ID Timestamp
0 026 2017-07-01
1 026 2017-08-01
2 026 2017-09-01
3 026 2017-10-01
4 026 2017-11-01
... ... ...
283 327 2017-07-01
284 327 2017-08-01
285 327 2017-09-01
... ... ...
528 500 2017-07-01
529 500 2017-08-01
IIUC,可以执行groupby.cumcount
和偏移:
df.Timestamp = pd.to_datetime(df.Timestamp)
df['Timestamp'] =df.Timestamp.min() + pd.DateOffset(months=1) * df.groupby('ID').cumcount()
输出:
ID Timestamp
0 26 2017-07-01
1 26 2017-08-01
2 26 2017-09-01
3 26 2017-10-01
4 26 2017-11-01
283 327 2017-07-01
284 327 2017-08-01
285 327 2017-09-01
528 500 2017-07-01
529 500 2017-08-01
这种方法将所有数据设置为从最小日期开始的连续月份。如果您只想更改日期,可以groupby().transform('min')
执行以下操作:
df.Timestamp -= df.groupby('ID')['Timestamp'].transform('min') - df.Timestamp.min()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句