如何创建客户 X 购买的每件商品的清单?

How to create a list of every items purchased by client X?

如何创建由我指定的客户 ID 购买的每件商品的列表?

这个问题是我正在构建的推荐系统的一部分。

我的数据框有3列['ClientID'],['Products'],['Ratings']

(与NaN不同的'Rating'表示购买的商品)

到目前为止我已经写了这段代码:

首先,我创建了一个枢轴 table,其中垂直索引为 ['ClientID'],水平索引为 ['Products'],['Ratings'] 为值。

piv = datacf1.pivot_table(index=['ClientID'], columns=['Products'], values=['Ratings'])
#Drop all columns containing only zeros, representing users who did not rate/purchased
piv.fillna(0, inplace=True)
piv = piv.T
piv = piv.loc[:, (piv != 0).any(axis=0)]

以下代码使用数据透视表 table 获取客户 X

购买的商品列表
#Create a list of every products traded by user X
purchased = piv.T[piv.loc[5039595.0,:]>0].index.tolist()
purchased

5039595 是 ['ClientID'],我想为其创建我的购买物品列表,我想根据需要应用不同的 ['ClientID']。

我在 运行 创建列表的代码时出错。

为什么我认为 'create a list' 代码给我一个错误: 我相信此代码将垂直索引读取为 ['0','1','2','3',...] 因此它期望找到列 '5039595',但是如前所述,垂直索引代表['ClientID'] 是随机的。

这是枢轴 table 的垂直索引 ['ClientID'] 的快照:

如何修复我的代码以查找我要为其创建列表的客户端 X?

或者有其他方法吗?也许我的原始数据集有 3 列 ['ClientID']、['Products']、['Ratings']

我认为最好的方法是 select 所有包含给定客户购买的行,然后从这些行中获取所有唯一的产品值。它看起来像这样:

desired_rows = (data["ClientID"].isin([client_id]) & data[Ratings].notnull())
product_list = data.loc[desired_rows, "Products"].unique().tolist()
print(product_list)