首页 > 解决方案 > 在 Pandas DataFrame 中获取几个月范围内的唯一计数

问题描述

我有一个数据框,其中包含客户姓名、订单数量和他们订购的日期。

我想知道,在几个月的范围内我有多少客户。因此,举个例子,计算 6 月到 10 月期间的唯一客户名称。

我努力了Cust_per_month = raw_data[['Customer']].groupby(raw_data.PDate.dt.month).nunique()

但这会返回一个包含每个月计数的系列,而我需要知道从六月到十月,然后从六月到十二月的范围。

我正在考虑创建一个条件,如果与我感兴趣的月份相关的任何整数出现,它只会计算一个客户,但这在我的书中似乎很笨拙。

标签: pythonpandasdataframe

解决方案


我将mask原始 DataFrame 然后计算。groupby对于唯一的、不重叠的组或固定窗口 ( groupby.rolling) 更有用,这两种方法都不适用于此处。

样本数据

import string
import pandas
import numpy

np.random.seed(42)
raw_data = pd.DataFrame({'PDate': pd.date_range('2010-01-01', freq='45D', periods=50),
                         'Customer': np.random.choice(list(string.ascii_lowercase), 50)})

代码

m1 = raw_data.PDate.dt.month.between(6, 10, inclusive=True) # [June, October]
m2 = raw_data.PDate.dt.month.between(6, 12, inclusive=True) # [June, December]

raw_data[m1].Customer.nunique()
# 14

raw_data[m2].Customer.nunique()
# 17

推荐阅读