如何用Python统计DataFrame中零值并对卖家进行分类统计
按销售数据分类卖家并统计数量的Python实现
示例数据构造
首先还原你提供的DataFrame:
import pandas as pd data = { 'Seller': ['SellerA', 'SellerB', 'SellerC', 'SellerD', 'SellerE', 'SellerF', 'SellerG', 'SellerH', 'SellerI'], 'Jan-02': [2, 12, 100, 0, 10, 100, 10, 7, 0], 'Feb-02': [0, 0, 150, 0, 22, 12, 70, 1, 0], 'Mar-02': [11, 30, 0, 0, 40, 11, 100, 1, 0], 'Apr-02': [12, 0, 0, 0, 0, 22, 121, 1, 0], 'May-02': [13, 40, 275, 0, 0, 0, 21, 1, 0], 'Jun-02': [17, 45, 300, 0, 0, 0, 22, 21, 0] } df = pd.DataFrame(data) df.set_index('Seller', inplace=True)
分类逻辑与实现
根据需求,按以下规则对卖家分类:
- 始终为0:所有月份的销售数据均为0
- 最后3个日期均为0:非全0,但最后3列(Apr-02、May-02、Jun-02)数据全为0
- 偶尔出现0:存在0值,但不属于上述两类
- 从未出现0:所有月份数据均不为0
实现代码如下:
# 计算各类条件的布尔标记 all_zero = (df == 0).all(axis=1) last_three_zero = (df.iloc[:, -3:] == 0).all(axis=1) & ~all_zero never_zero = (df != 0).all(axis=1) occasional_zero = ~all_zero & ~last_three_zero & ~never_zero # 统计各类别数量及卖家列表 category_stats = { '始终为0': { 'count': all_zero.sum(), 'sellers': all_zero[all_zero].index.tolist() }, '最后3个日期均为0': { 'count': last_three_zero.sum(), 'sellers': last_three_zero[last_three_zero].index.tolist() }, '偶尔出现0': { 'count': occasional_zero.sum(), 'sellers': occasional_zero[occasional_zero].index.tolist() }, '从未出现0': { 'count': never_zero.sum(), 'sellers': never_zero[never_zero].index.tolist() } } # 输出结果 for category, stats in category_stats.items(): print(f"{category} - 卖家数量={stats['count']};例如{stats['sellers']}")
运行结果
执行后会输出:
始终为0 - 卖家数量=2;例如['SellerD', 'SellerI'] 最后3个日期均为0 - 卖家数量=1;例如['SellerE'] 偶尔出现0 - 卖家数量=3;例如['SellerA', 'SellerB', 'SellerC'] 从未出现0 - 卖家数量=2;例如['SellerG', 'SellerH']
内容的提问来源于stack exchange,提问作者harry
相关产品推荐
相关产品推荐

