我的数据集有两列,分别是userid和transaction time。我想创建第三列,指出自上次用户购买以来的时间。例如:
User Id Timestamp
92212 2015-08-20T15:52:53
26123 2015-10-29T14:44:06
92212 2015-07-21T16:21:55
第三列内容如下:
^{pr2}$其中1表示自上次购买后一个月(8月vs 7月),0表示首次购买(或者可能更适合NaN?)。在
本质上,我需要对userid进行分组,按时间顺序排列事务时间,并计算到之前时间的距离。也可以采用任何其他方法来解决自上次订单以来的保留问题。在
我现在已经把它打包成这样的代码:
def monthSinceLastOrder(transactionArray):
transactionArray = transactionArray.order()
monthValues = []
for transDate in transactionArray:
monthValues.append(transDate.month)
distance = [-1]
for i in monthValues:
if monthValues[0]==i:
prior=i
else:
distance.append(i-prior)
prior=i
return distance
您描述的是Pandas
Split-Apply-Combine
方法。http://pandas.pydata.org/pandas-docs/stable/groupby.html我们可以根据用户Id进行分组,然后为每个组应用一个函数来计算行之间的差异。在
让我们设置数据帧:
现在定义一个将在每个组上操作的函数,并应用它。在
该函数按时间戳排序,并为每一行创建一个新的
^{pr2}$Delta
列,设置为自身与前一行之间的差异。如果没有前一行(即第一次购买),则返回NaT。在生成的数据帧如下所示:
从向量化操作的角度考虑这一点的方法是使用
shift
来偏移时间戳列,然后使用减法(这将沿着数组广播)相关问题 更多 >
编程相关推荐