You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 12:17:32