Python实现获取CSV文件中订单量最多的前3位客户(不使用Pandas/Numpy)
解决思路与代码实现
你的当前代码只是按customer_id对行进行排序,这没法帮你统计每个客户的订单总量,方向不对哦。咱们用Python内置的字典就能搞定这个需求,完全不需要Pandas或Numpy,具体步骤和代码如下:
核心步骤
- 遍历CSV的每一行,统计每个
customer_id对应的所有订单ID(这样既能拿到订单数量,也能保留具体的order_id信息) - 把统计结果按订单数量从多到少排序
- 提取排序后的前3个客户信息
完整代码示例
假设你的CSV结构是这样(第一行是表头):
order_id,customer_id,other_info 1001,C001,xxx 1002,C001,xxx 1003,C002,xxx 1004,C003,xxx 1005,C001,xxx 1006,C002,xxx 1007,C004,xxx
对应的实现代码:
import csv # 1. 统计每个客户的订单信息 customer_order_map = {} with open('file.csv', 'r') as f: csv_reader = csv.reader(f) # 跳过表头,如果你的CSV没有表头,直接注释掉下面这行 header = next(csv_reader) for row in csv_reader: order_id = row[0] # 假设order_id在第一列(索引0) customer_id = row[1] # 假设customer_id在第二列(索引1) # 如果客户还没在字典里,先初始化一个空列表存订单ID if customer_id not in customer_order_map: customer_order_map[customer_id] = [] customer_order_map[customer_id].append(order_id) # 2. 按订单数量降序排序,排序依据是每个客户的订单列表长度 sorted_customers = sorted( customer_order_map.items(), key=lambda item: len(item[1]), reverse=True ) # 3. 获取订单量最多的前3位客户 top_3_customers = sorted_customers[:3] # 4. 输出结果 print("订单量最多的前3位客户:") for rank, (cust_id, order_ids) in enumerate(top_3_customers, start=1): print(f"第{rank}名:customer_id={cust_id},订单数量={len(order_ids)},订单ID列表:{', '.join(order_ids)}")
关键说明
- 用字典
customer_order_map存储每个客户的所有订单ID,这样既可以通过len(order_ids)得到订单数量,也能直接获取对应的order_id,完美符合你的需求 sorted()函数的key参数指定按订单列表的长度排序,reverse=True确保是从订单最多到最少的顺序- 如果你的CSV没有表头,一定要删除
header = next(csv_reader)这一行,不然会漏掉第一行的订单数据
内容的提问来源于stack exchange,提问作者twingo
相关产品推荐
相关产品推荐

