python 中的购物篮分析

Market basket analysis in python

我正在对一家鞋店的 xlsx 数据集进行购物篮分析 我的数据集就像

收据ID |物品名称 |类别 |净数量

123 |黑鞋 |鞋子 | 5

123 |棕色鞋子 |鞋子 | 4

125 |凉鞋 |凉鞋 | 2

125 |白沙瓦 |鞋子 | 1

我希望我的数据像

收据ID |物品名称 |类别 |网络数量

123 |黑鞋,棕鞋 |鞋子 | 9

125 |凉鞋,白沙瓦 |凉鞋、鞋子| 3

def new_list(items): 
   Row_list=[ ] 
   for rows in items.ReceiptID: 
     if items.ReceiptD==ReceiptID-1: 
       my_list=[items.ItemName] 
       Row_list.append(my_list) 
     return(Row_list) 

我想要 python 中的一个函数,如果我在其中加载数据帧,它就会执行此操作。 谢谢:)

IIUC 你只需要 groupby + agg 如下

df = pd.DataFrame({"ReceiptID": [123,123,125,125],
                   "ItemName": ["Black Shoe", "Broen Shoe", "Sandal", "Peshawari"],
                   "Category": ["Shoes", "Shoes", "Sandal" ,"Shoes"],
                   "NetQty": [5,4,2,1]})


out = df.groupby("ReceiptID")\
        .agg({"ItemName":"unique",
              "Category":"unique",
              "NetQty":"sum"})\
        .reset_index()
   ReceiptID                  ItemName         Category  NetQty
0        123  [Black Shoe, Broen Shoe]          [Shoes]       9
1        125       [Sandal, Peshawari]  [Sandal, Shoes]       3

如果您只需要字符串而不是列表,您可以添加这两行

for col in ["ItemName", "Category"]:
    out[col] = out[col].str.join(", ")
   ReceiptID                ItemName       Category  NetQty
0        123  Black Shoe, Broen Shoe          Shoes       9
1        125       Sandal, Peshawari  Sandal, Shoes       3