python - 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。
提前致谢
解决方案
如果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 位客户。
推荐阅读
- android - InputStream 房间类型转换器
- sql-server - Select columns from several tables with count
- unity3d - 为什么我的统一编辑器崩溃了?使用实例化
- authentication - 无法通过登录页面注册
- python - 为什么标签包不单独使用时会报错
- javascript - 使用 javascript 来处理断点而不是 css
- python-3.x - 构建成功后 Flask 应用程序不工作
- c# - 服务定位器与构造器注入性能
- python - Pandas 和 glob:将文件夹中的所有 xlsx 文件转换为 csv – TypeError: __init__() got an unexpected keyword argument 'xfid'
- python - 熊猫:如何排除匹配的并仅使用多级列索引获取数据框中突出显示的差异