You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python构建Feature Matrix:基于两份Excel购物数据的需求

构建基于购物记录的特征矩阵(Python实现)

没问题,我帮你搞定这个需求。咱们可以用pandas来处理这两个Excel文件,根据你的数据特点,有两种常见的特征矩阵构建方式,我都会给你演示清楚。

先明确数据情况

你的食品购买数据里,存在同一个人同一天购买多种食品的情况(比如Bob在2015年3月14日买了苹果和梨),而饮品数据里每个(姓名+日期)组合只有一条记录。我们可以基于这个情况选择不同的构建方式。


方式1:每条食品购买记录作为特征矩阵的一行

这种方式下,每一行对应一次食品购买行为,同时关联当天购买的饮品,适合需要分析单类食品购买关联的场景。

步骤1:读取Excel文件

import pandas as pd

# 读取食品和饮品数据
food_df = pd.read_excel('food_shopping.xlsx')
drink_df = pd.read_excel('drink_shopping.xlsx')

步骤2:合并数据集

基于Name和Day of Shopping做内连接,把每条食品记录和当天的饮品记录关联起来:

merged_df = pd.merge(food_df, drink_df, on=['Name', 'Day of Shopping'], how='inner')

合并后的结果示例:

NameDay of ShoppingFood boughtDrink bought
Bob2015年3月14日苹果水
Bob2015年3月14日梨水
Bob2017年6月28日石榴苏打水
Joe2013年4月15日苹果果汁
Joe2016年12月6日香蕉苏打水
Jake2008年1月4日橙子水
Jake2010年4月9日桃子茶

步骤3:生成one-hot特征矩阵

把食品和饮品转换成数值型的one-hot特征,方便后续建模使用:

feature_matrix = pd.get_dummies(merged_df, columns=['Food bought', 'Drink bought'])

最终特征矩阵示例(部分列):

NameDay of ShoppingFood bought_苹果Food bought_梨Drink bought_水
Bob2015年3月14日101
Bob2015年3月14日011
Bob2017年6月28日000

方式2:每个(姓名+日期)组合作为特征矩阵的一行

这种方式下,每一行对应一个人一天的完整购物记录,把当天购买的所有食品和饮品都作为特征(比如当天买了苹果和梨,对应的两个特征列都为1),适合分析用户单日购物行为的场景。

步骤1:预处理食品数据,合并同一天的购买记录

# 分组聚合,把同一个人同一天买的食品合并成列表
food_grouped = food_df.groupby(['Name', 'Day of Shopping'])['Food bought'].apply(list).reset_index()

# 合并饮品数据
merged_df = pd.merge(food_grouped, drink_df, on=['Name', 'Day of Shopping'], how='inner')

合并后的中间结果:

NameDay of ShoppingFood boughtDrink bought
Bob2015年3月14日['苹果', '梨']水
Bob2017年6月28日['石榴']苏打水

步骤2:生成合并后的特征矩阵

把食品列表展开做one-hot编码,再按(姓名+日期)分组取最大值(表示当天是否购买了该食品):

# 展开食品列表并做one-hot编码,再分组聚合
feature_matrix = (
    merged_df.explode('Food bought')
    .pipe(pd.get_dummies, columns=['Food bought', 'Drink bought'])
    .groupby(['Name', 'Day of Shopping'])
    .max()
    .reset_index()
)

最终特征矩阵示例(部分列):

NameDay of ShoppingFood bought_苹果Food bought_梨Drink bought_水
Bob2015年3月14日111
Bob2017年6月28日000

额外优化:日期特征处理

如果需要把日期转换成可建模的数值特征,可以解析日期并提取年、月、日:

# 解析中文日期为datetime类型
merged_df['Day of Shopping'] = pd.to_datetime(merged_df['Day of Shopping'], format='%Y年%m月%d日')

# 提取日期特征
feature_matrix['Year'] = merged_df['Day of Shopping'].dt.year
feature_matrix['Month'] = merged_df['Day of Shopping'].dt.month
feature_matrix['Day'] = merged_df['Day of Shopping'].dt.day

这样处理后,特征矩阵就包含了更丰富的数值特征,方便后续的机器学习建模或数据分析使用。

内容的提问来源于stack exchange,提问作者A.Code.1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:49:43