python - 在 Pandas DataFrame 中获取几个月范围内的唯一计数
问题描述
我有一个数据框,其中包含客户姓名、订单数量和他们订购的日期。
我想知道,在几个月的范围内我有多少客户。因此,举个例子,计算 6 月到 10 月期间的唯一客户名称。
我努力了Cust_per_month = raw_data[['Customer']].groupby(raw_data.PDate.dt.month).nunique()
但这会返回一个包含每个月计数的系列,而我需要知道从六月到十月,然后从六月到十二月的范围。
我正在考虑创建一个条件,如果与我感兴趣的月份相关的任何整数出现,它只会计算一个客户,但这在我的书中似乎很笨拙。
解决方案
我将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
推荐阅读
- google-sheets-formula - 如何使用 REEXTRACT 在 GoogleSheets 中提取 url
- statistics - 指数模拟 - 大量数据
- python - 当我切换到 Python Tkinter Frame 时,它是空的
- node.js - dynamodb 调用不会等待完成
- laravel - Vue 3,未捕获的 TypeError:Vue.use 不是函数
- javascript - 我想知道在执行下一行代码之前如何等待返回函数发送数据
- javascript - 将 XML 转换为 PHP,数据有时作为数组返回,有时不是
- javascript - 从特定点旋转 HTML 中的箭头
- asp.net-core - 在 Asp Net Core 3.1 中手动验证来自 OIDC 提供程序的令牌,而没有“众所周知的”元数据
- kotlin - 使用不同的配置两次运行相同的自动化测试