我希望以前没有问过这个问题。我有一个包含以下列和信息的csv文件,我可以使用完全相同的列名将其上传到sqlite3数据库
Company Type Qty Price
ABC r 5 $$$
ABC h 9 $$$
ABC s 10 $$$
DER a 3 $$$
DER z 6 $$$
GGG q 12 $$$
GGG w 20 $$$
但是,如何在csv文件中获得以下结果?基本上,按公司名称进行分组,仍显示类型,数量和价格,并在显示每家公司总数量的行末。
Company Type Qty Price Total Qty
ABC r 5 $$$
h 9 $$$
s 10 $$$ 24
DER a 3 $$$
z 6 $$$ 9
GGG q 12 $$$
w 20 $$$ 32
我一直在尝试使用GROUP BY,但没有运气。 任何帮助深表感谢 谢谢
答案 0 :(得分:3)
我会使用SQL和itertools.groupby
的组合来完成此操作。
例如:
results = cxn.execute("SELECT * FROM orders ORDER BY Company")
for company, orders_iter in itertools.groupby(results, key=lambda r: r[0]):
orders = list(orders_iter)
total_qty = sum(order[2] for order in orders)
... print out orders ...
拥有比我更多的SQL-foo的人可能能够提出一个可以产生你想要的结果的查询...但是这可能是不必要的,特别是考虑到这一点,只需稍加修改(在迭代时计算总数)在订单上),Python代码只需要O(n)
时间和O(1)
内存。