如何从二进制DataFrame中推导分析结果?附产品分类信息
产品分类整理
Category A
- X800818
- X822707
- X822708
- X870082
- X800810
- X800323
- X800835
- X893890
- X822541
- X800831
Category B
- X830742
- X841223
- X841449
- X870138
- X810352
- X870146
- X800850
- X841236
- X811712
- X893314
Category C
- X893609
- X890188
- X893313
- X841271
- X891250
- X811820
- X728538
- X727220
- X960804
- X728904
Category D
- X727345
- X800875
- X727302
- X870426
- X729002
- X727300
- X759042
- X728495
- X897198
- X790190
二进制DataFrame分析思路(结合产品分类)
嘿,先得明确你的二进制DataFrame的基础结构——比如行是不是代表某个样本(比如用户、订单、检测样本之类的),列是不是对应上面的产品编号,而0/1值代表「该样本是否包含这个产品」(比如1=拥有,0=没有)?如果是这个常见场景的话,咱们可以按下面的步骤来推导分析结果:
1. 先建立产品-分类的映射字典
首先把每个产品编号和它所属的分类绑定,这样能把DataFrame里的产品维度快速转换成分类维度,用Python pandas的代码示例如下:
import pandas as pd # 构建产品-分类映射字典 product_category = {} # 批量添加Category A的产品映射 category_a = ["X800818", "X822707", "X822708", "X870082", "X800810", "X800323", "X800835", "X893890", "X822541", "X800831"] for p in category_a: product_category[p] = "Category A" # 批量添加Category B的产品映射 category_b = ["X830742", "X841223", "X841449", "X870138", "X810352", "X870146", "X800850", "X841236", "X811712", "X893314"] for p in category_b: product_category[p] = "Category B" # 批量添加Category C的产品映射 category_c = ["X893609", "X890188", "X893313", "X841271", "X891250", "X811820", "X728538", "X727220", "X960804", "X728904"] for p in category_c: product_category[p] = "Category C" # 批量添加Category D的产品映射 category_d = ["X727345", "X800875", "X727302", "X870426", "X729002", "X727300", "X759042", "X728495", "X897198", "X790190"] for p in category_d: product_category[p] = "Category D"
2. 基础统计分析:分类层面的覆盖情况
2.1 每个样本的分类持有情况
计算每个样本拥有多少个不同分类的产品,或者具体拥有哪些分类:
# 假设你的二进制DataFrame名为df,列是产品编号 # 按分类分组,计算每个分类下是否有至少一个产品为1(即该样本拥有该分类的产品) category_df = df.groupby(product_category, axis=1).max() # 现在category_df的列就是Category A/B/C/D,值为0/1,表示样本是否拥有对应分类的产品 # 计算每个样本拥有的分类数量 category_df['total_categories'] = category_df.sum(axis=1)
通过这个结果,你能看到样本的产品覆盖广度分布——比如有多少样本只拥有1个分类的产品,多少样本同时持有3个分类的产品。
2.2 分类的整体流行度
统计各分类的用户/样本覆盖占比,或者产品总拥有次数:
# 各分类的样本拥有占比(百分比) category_popularity = category_df.mean() * 100 print("各分类拥有样本占比:\n", category_popularity) # 各分类下产品的总拥有次数(所有样本中该分类产品被持有的总次数) category_total_counts = df.groupby(product_category, axis=1).sum().sum() print("各分类产品总拥有次数:\n", category_total_counts)
3. 关联分析:分类之间的相关性
想知道哪些分类经常被同时拥有?可以用相关性分析或交叉统计:
# 计算分类之间的皮尔逊相关系数,看分类间的关联程度 category_corr = category_df.corr() print("分类间相关性:\n", category_corr) # 统计同时拥有A和B类产品的样本占比 a_and_b_ratio = category_df[(category_df['Category A'] == 1) & (category_df['Category B'] == 1)].shape[0] / category_df.shape[0] * 100 print(f"同时拥有A和B类产品的样本占比:{a_and_b_ratio:.2f}%")
4. 进阶分析:根据分类分布做细分
如果你的DataFrame有对应标签(比如用户消费等级、样本检测结果),可以分析分类与标签的关联:
# 假设df有一个标签列'label',比如'高价值'/'低价值' # 查看不同标签下的分类拥有差异 label_category_stats = category_df.groupby(df['label']).mean() * 100 print("不同标签下的分类拥有占比:\n", label_category_stats)
如果没有标签,也可以用K-Means等聚类算法,把样本按分类分布分成不同群体,挖掘各群体的分类偏好。
内容的提问来源于stack exchange,提问作者BS.Mira
相关产品推荐
相关产品推荐

