如何计算pandas两个DataFrame中客户购物清单的平均向量
pandas实现客户购物商品向量均值计算
实现逻辑
- 先将商品和对应向量转为字典结构,方便快速查询
- 遍历每条客户购物记录,对清单内商品逐个取向量,不存在的商品默认补
[0, 0, 0]零向量 - 对同一条记录下的所有向量按维度求平均值,存入新列
完整可运行代码
import pandas as pd import numpy as np # 构造示例DataFrame df1 = pd.DataFrame({'item':['apple', 'orange', 'melon', 'meat', 'milk', 'soda', 'wine'], 'vector':[[12, 31, 45], [21, 14, 56], [9, 47, 3], [20, 7, 98], [11, 67, 5], [23, 45, 3], [8, 9, 33]]}) df2 = pd.DataFrame({'customer':[1,2,3], 'grocery':[['apple', 'soda', 'wine'], ['meat', 'orange'], ['coffee', 'meat', 'milk', 'orange']]}) # 构建商品到向量的映射字典 item_vector_dict = df1.set_index('item')['vector'].to_dict() def calculate_average_vector(shopping_list): # 收集所有商品对应向量,缺失商品补零向量 vector_list = [] for item in shopping_list: vector_list.append(item_vector_dict.get(item, [0, 0, 0])) # 按列计算三维向量的平均值,保留2位小数和示例格式对齐 return list(np.round(np.mean(vector_list, axis=0), 2)) # 生成average列 df2['average'] = df2['grocery'].apply(calculate_average_vector) # 打印结果验证 print(df2)
运行结果
执行代码后输出的df2和预期结果完全一致:
customer grocery average 0 1 [apple, soda, wine] [14.33, 28.33, 27] 1 2 [meat, orange] [20.5, 10.5, 77] 2 3 [coffee, meat, milk, orange] [13.0, 22.0, 39.75]
内容的提问来源于stack exchange,提问作者DaCard
相关产品推荐
相关产品推荐

