代码之家  ›  专栏  ›  技术社区  ›  Eleanor

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

  •  0
  • Eleanor  · 技术社区  · 6 年前

    这是一个例子。

    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”肯定是连续的,唯一对(a,b)的二进制标志“k”是相同的,这意味着它与“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是一个时差变量。它显示当前时间点和带有操作的最后时间点之间的持续时间。如果以前没有动作,则返回nan。此差异B按A分组。对于每个用户,此差异B是独立计算的,对于同一个用户但不同的产品,它也应独立于产品。

    谢谢您。

    1 回复  |  直到 6 年前
        1
  •  2
  •   BENY    6 年前

    您只需要在第二步将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']