这是一个例子。
a b k c
0 0 0 0
0 1 1 0
0 2 0 0
0 3 0 0
0 4 1 0
0 5 0 0
0 0 0 1
0 1 1 1
0 2 0 1
0 3 0 1
0 4 1 1
0 5 0 1
1 0 0 0
1 1 1 0
1 2 0 0
1 3 1 0
1 4 0 0
1 0 0 1
1 1 1 1
1 2 0 1
1 3 1 1
1 4 0 1
在这里," a"是用户ID," b"是时候了,' c'是产品和" k"是二进制指示标志。对于每个c," b"是肯定的连续和二元旗帜' k'唯一对(a,b)是相同的,这意味着它与'c'独立。我想得到的是:
a b k c diff_b
0 0 0 0 nan
0 1 1 0 nan
0 2 0 0 1
0 3 0 0 2
0 4 1 0 3
0 5 0 0 1
0 0 0 1 nan
0 1 1 1 nan
0 2 0 1 1
0 3 0 1 2
0 4 1 1 3
0 5 0 1 1
1 0 0 0 nan
1 1 1 0 nan
1 2 0 0 1
1 3 1 0 2
1 4 0 0 1
1 0 0 1 nan
1 1 1 1 nan
1 2 0 1 1
1 3 1 1 2
1 4 0 1 1
因此,diff_b是一个时差变量。它显示当前时间点与最后一个时间点之间的持续时间。如果之前从未有过任何动作,则返回nan。此diff_b按a分组。对于每个用户,此diff_b是独立计算的,对于同一用户但不同的产品,它也应与产品无关。
谢谢。
答案 0 :(得分:2)
您只需在第二步将c添加到组指示器中
df['New']=df.b.loc[df.k==1]# get all value b when k equal to 1
df.New=df.groupby(['a','c']).New.apply(lambda x : x.ffill().shift()) # fillna by froward method , then we need shift.
df.b-df['New']