首页 > 解决方案 > Python 中 CSV 列中的前 3 个值

问题描述

我有一个 csv 文件,如下所示:

在此处输入图像描述

我想打印下订单最多的前 3 个客户(customer_id 和 order_id)。

我尝试了以下方法:

with open('file.csv', 'r') as f:
    file = csv.reader(f)

    # sort based on customer id
    sorted_file = sorted(file, key=lambda d: d[1])

我确定这种方法是否正确。另外,我不打算为此使用 Pandas 或 Numpy。

提前致谢

标签: pythoncsv

解决方案


如果status列的值不是选择前 3 名客户的因素,您可以创建一个包含订单数的字典。

代码:

import csv


with open("orders.csv") as csvfile:
    reader = csv.DictReader(csvfile)
    orders_count = {}
    for line in reader:
        orders_count[line["customer_id"]] = orders_count.get(line["customer_id"], 0) + 1
    customers = sorted(orders_count.items(), key=lambda customer:customer[1], reverse=True)
    print(customers[:3])

输出:

[('10', 3), ('11', 3), ('13', 3)]

orders.csv

order_id,customer_id,status
1,10,Successful
2,11,Successful
3,11,Successful
4,10,Waiting
5,12,Waiting
6,10,Successful
7,11,Wairing
8,13,Successful
9,13,Waiting
10,13,Successful

解释:

  • 使用方法读取 csv 文件内容DictReader。详细信息可以在官方文档中找到
  • 创建了一个字典orders_count来统计每个客户的订单数量。我假设每个客户都有一个唯一的客户 ID。
  • orders_count值排序以获取按订单总数排序的客户列表。reverse=True用于降序排序。
  • 最后,打印订单数量最多的前 3 位客户。

推荐阅读