按 window 扩展组以计算 nunique

Expanding group by window to count nunique

我有以下 df:

df=pd.DataFrame(data={'month':[1]*4+[2]*4+[3]*4,'customer':[1,2,3,4,1,5,6,7,2,3,10,7]})

我想创建一个扩展的 window 来计算任何时候唯一身份客户的数量。 以下 df 的输出应为:

{1:4,2:7,3:8}

因为在第一个月我们有 4 个不同的客户,在第二个月,添加了 3 个(另一个是在第一个月,最后一个月只添加了一个(编号 10))

谢谢

您可以先删除重复的客户(只保留第一个出现的客户),然后累加每月(现在唯一的)客户的数量:

counts = df.drop_duplicates("customer").groupby("month").size().cumsum().to_dict()

得到

>>> counts

{1: 4, 2: 7, 3: 8}

由于有回头客,您可以使用

删除那些回头客
df.drop_duplicates(subset='customer',ignore_index=True,inplace=True)

默认情况下,它将保留第一次出现的客户编号,并删除下一次出现的客户编号。要计算每月唯一身份客户的数量,

df['customer'] = df.groupby('month')['customer'].transform('count')
df = df.drop_duplicates(ignore_index=True)

要将 window 滚动到 customer 列,计算该列的累计总和

df['customer'] = df['customer'].cumsum()

它将给出所需的输出

month   customers
  1        4
  2        7
  3        8