如何在Power Query中基于订单次数与产品类别创建哑变量?
高效生成订单次数与产品类别组合哑变量的方法
针对大型客户购买数据集,可通过Python的pandas库实现自动化生成订单次数与产品类别的组合哑变量,步骤如下:
步骤1:标记客户订单次数
首先为每个客户的订单按时间排序,标记首次、二次等购买次数:
import pandas as pd # 确保订单日期为datetime类型(若原始数据是字符串格式) data['order_date'] = pd.to_datetime(data['order_date']) # 按客户分组,按订单日期排序,生成订单次数(1=首次购买,2=二次购买...) data['order_rank'] = data.groupby('customer_id')['order_date'].rank(method='first').astype(int) # 可选:转换为更直观的文本标签,比如"1次购买"、"2次购买" data['order_rank_label'] = data['order_rank'].apply(lambda x: f"{x}次购买")
步骤2:拆分订单内的多产品类别
将同一订单中的多个产品类别拆分为单独行,方便后续生成组合特征:
# 拆分逗号分隔的产品类别字符串(若原始数据是列表格式,直接跳过split步骤) data_exploded = data.assign(product_category=data['product_categories'].str.split(',')).explode('product_category')
步骤3:生成订单次数-产品类别组合特征
创建组合列,将订单次数标签与产品类别拼接:
data_exploded['order_category_comb'] = data_exploded['order_rank_label'] + '_' + data_exploded['product_category']
步骤4:生成组合哑变量
利用pd.get_dummies快速生成哑变量,并按订单ID聚合(同一订单内只要包含对应类别,哑变量标记为1):
# 生成哑变量 dummies = pd.get_dummies(data_exploded['order_category_comb'], prefix='', prefix_sep='') # 按订单ID聚合,取最大值确保同一订单的多类别都被标记 dummies_agg = dummies.groupby(data_exploded['order_id']).max() # 合并回原数据集 final_data = data.merge(dummies_agg, on='order_id', how='left')
大型数据集优化建议
- 若数据集规模极大,可使用
dask.dataframe替代pandas,支持并行计算提升处理速度 - 提前清理数据:确保
customer_id、order_id无缺失值,product_categories格式统一 - 若订单次数需要随新数据动态更新,仅需重新运行上述代码即可,无需手动调整规则
内容的提问来源于stack exchange,提问作者HeadyFinance
相关产品推荐
相关产品推荐

