pandas根据具有重复分组对的列分组的指标计算差异

时间:2018-05-31 17:41:46

标签: python pandas group-by

这是一个例子。

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是独立计算的,对于同一用户但不同的产品,它也应与产品无关。

谢谢。

1 个答案:

答案 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']