按窗口扩展分组以计算 nunique

时间:2021-06-20 13:59:44

标签: pandas window pandas-groupby

我有以下 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]})

我想创建一个扩展窗口来随时计算唯一客户的数量。 以下 df 的输出应为:

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

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

谢谢

2 个答案:

答案 0 :(得分:2)

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

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

得到

>>> counts

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

答案 1 :(得分:1)

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

删除那些回头客
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)

要将窗口滚动到 customer 列上,计算该列的累积总和

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

它将给出所需的输出

month   customers
  1        4
  2        7
  3        8