我有以下 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 个))
谢谢
答案 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