【问题标题】:How to create a list of every items purchased by client X?如何创建客户 X 购买的每件商品的清单?
【发布时间】:2020-11-26 19:22:54
【问题描述】:

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

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

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

(与 NaN 不同的“评级”代表购买的产品)

到目前为止,我已经编写了以下代码:

首先,我创建了一个数据透视表,其中垂直索引为 ['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)]

以下代码使用数据透视表获取客户 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']。

运行代码创建列表时出现错误。

为什么我认为“创建列表”代码会给我一个错误: 我相信这段代码将垂直索引读取为 ['0','1','2','3',...] 所以它希望找到列 '5039595',但是如前所述,垂直索引表示['ClientID'] 是随机的。

这是数据透视表的垂直索引 ['ClientID'] 的快照:

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

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

【问题讨论】:

    标签: python pandas list pivot-table recommender-systems


    【解决方案1】:

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

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

    【讨论】:

    • 执行得很漂亮!谢谢!如果您想编辑答案,您刚刚添加了两次“&”。
    • 谢谢!我会解决的。我希望布尔运算符在不同语言中保持一致,但这就是生活。很高兴你发现它充满希望。
    猜你喜欢
    • 2011-06-08
    • 2021-08-28
    • 1970-01-01
    • 2020-12-05
    • 2018-02-24
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多