如何使用pandas实现品牌与月份的特征交叉生成BrandsxMonths新特征
实现方案
pandas可以非常简便的完成特征交叉操作,无需依赖TensorFlow,以下是不同场景下的实现方式:
- 方案1:直接拼接两个字段生成交叉列
如果不需要对月份做分桶处理,直接将两个字段转成字符串后拼接即可生成BrandsxMonths特征:
import pandas as pd # 示例数据初始化 df = pd.DataFrame({ 'Brands': ['hersheys', 'hersheys', 'snickers', 'reeses'], 'Months': ['2020-08', '2020-09', '2020-01', '2019-02'], 'Sales': ['$100', '$200', '$20', '$200'] }) # 生成交叉特征 df['BrandsxMonths'] = df['Brands'] + '_' + df['Months']
输出结果中BrandsxMonths列的取值会是hersheys_2020-08、snickers_2020-01这类格式。
- 方案2:先对月份分桶再交叉
如果需要和TensorFlow分桶逻辑对齐,先对月份做区间划分再做交叉,实现如下:
# 先把月份转成datetime格式方便分桶 df['Months'] = pd.to_datetime(df['Months']) # 示例:按年份分桶,也可以按季度、自定义时间区间等规则分桶 df['month_bucket'] = df['Months'].dt.year.astype(str) # 按季度分桶可以写为 df['month_bucket'] = df['Months'].dt.to_period('Q').astype(str) # 再生成分桶后的交叉特征 df['BrandsxMonths_bucket'] = df['Brands'] + '_' + df['month_bucket']
- 方案3:生成One-Hot编码形式的交叉特征
如果交叉特征需要直接输入模型,也可以直接生成独热编码格式的交叉特征:
# 分别对两个字段做独热编码,再按位置相乘得到交叉特征的独热编码 brands_onehot = pd.get_dummies(df['Brands'], prefix='brand') months_onehot = pd.get_dummies(df['Months'], prefix='month') cross_onehot = brands_onehot.values[:,:,None] * months_onehot.values[:,None,:] # 也可以直接用拼接后字段做独热:cross_onehot = pd.get_dummies(df['BrandsxMonths'])
内容的提问来源于stack exchange,提问作者user15569323
相关产品推荐
相关产品推荐

