我试图为我的销售表中的每种不同产品创建独特买家的摘要。我的目标结果如下:
创建此摘要并将其分配给变量,如下所示:
# Count of DISTINCT PROD1 CUSTOMERS
PROD1_CUST = (
Sales_Df.loc[(Sales_Df.Prod1_Qty > 0)]
.groupby("CustSeg")["CustID"]
.count()
.reset_index(name="UNIQUE_PROD1_CUST")
)
PROD1_CUST
Sales_Df数据帧可以通过以下方式复制:
Sales_Qty = {
"CustID": ['C01', 'C02', 'C03', 'C04', 'C05', 'C06', 'C07', 'C08', 'C09', 'C10', 'C11', 'C12', 'C13', 'C14', 'C15', 'C16', 'C17', 'C18', 'C19', 'C20', ],
"CustSeg": ['High', 'High', 'Mid', 'High', 'Low', 'Low', 'Low', 'Low', 'Low', 'Mid', 'Low', 'Low', 'Mid', 'Low', 'High', 'High', 'High', 'High', 'Mid', 'Low', ],
"Prod1_Qty": [8, 7, 12, 15, 7, 15, 7, 8, 3, 15, 0, 3, 4, 4, 7, 11, 12, 12, 6, 1, ],
"Prod2_Qty": [2, 5, 0, 1, 14, 15, 3, 1, 11, 0, 5, 11, 12, 8, 6, 15, 7, 4, 3, 10, ],
"Prod3_Qty": [13, 4, 0, 11, 3, 5, 11, 11, 10, 14, 2, 4, 3, 14, 14, 10, 5, 0, 0, 9, ],
"Prod4_Qty": [11, 15, 2, 0, 6, 2, 12, 14, 11, 15, 5, 14, 13, 0, 10, 2, 13, 11, 12, 15, ],
"Prod5_Qty": [9, 15, 5, 4, 9, 0, 13, 9, 8, 11, 10, 12, 8, 3, 14, 11, 9, 15, 8, 14, ]
}
Sales_Df = pd.DataFrame(Sales_Qty)
Sales_Df
现在,在现实生活中,数据框的形状要大得多(至少(5000000130)),这使得手动重复每个产品的摘要变得很脆弱,因此我尝试自动创建变量和摘要。我将通过以下步骤完成这项任务
# Extract the proposed variable names from the dataframe column names.
all_cols = Sales_Df.columns.values.tolist()
# Remove non-product quantity columns from the list
not_prod_cols = ["CustSeg", "CustID"]
prod_cols = [x for x in all_cols if x not in not_prod_cols]
我知道接下来的事情应该是:
从列表prod_cols创建变量名并存储 列表中的这些变量-让我们命名列表prod\u dfs
prod_dfs = []
创建用于创建数据帧和附加的动态公式 使用下面的“逻辑”将其变量名添加到prod_dfs
for x in prod_cols:
x[:-4] + "_CUST" = (
Sales_Df.loc[(Sales_Df.x > 0)]
.groupby("CustSeg")["CustID"]
.count()
.reset_index(name="UNIQUE" + x[:-4] + "_CUST")
)
prod_dfs.append(x)
这就是我被困的地方。请帮忙
感谢您分享一个可复制的示例,您似乎已经取得了良好的进展。如果我理解正确,您希望能够计算每个细分市场中购买给定商品的唯一客户的数量
按照您的方法,您可以迭代产品列,计算计数,并将其分配给结果数据框:
这将在第二个方面对您有所帮助,因为您不必为所有列编写此聚合代码
但是,生成的代码不是很有效,因为它执行O(m)groupby操作,其中m是列数
您可以通过稍微不同的逻辑获得所需的结果
这一行程序实现了这种逻辑
请注意,我们首先删除
CustID
,因为在您的示例中,在按CustSeg
分组后,它是唯一一个不是产品数量的列作为旁白:考虑复习pandas indexing basics。您可能会发现使用
df['A']
的语法比使用df.A
更容易,因为它允许您更有效地使用其他编程结构相关问题 更多 >
编程相关推荐