Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否仅使用标准库从另一列的分组值中按一列的累计总数对文本文件进行排序?_Python_Sorting_Sum_Cumulative Sum_Accumulate - Fatal编程技术网

Python 是否仅使用标准库从另一列的分组值中按一列的累计总数对文本文件进行排序?

Python 是否仅使用标准库从另一列的分组值中按一列的累计总数对文本文件进行排序?,python,sorting,sum,cumulative-sum,accumulate,Python,Sorting,Sum,Cumulative Sum,Accumulate,我有一个文件,上面有这样的行 id, car_type, cost 1, benz, 60000 2, benz, 55000 3, bmw, 30000 4, benz, 25000 5, bmw, 26000 6, ford, 5000 我想按每种车型的总成本对该文件进行排序。例如,“benz”的总成本为60000+55000+25000=14000 所以最终的输出应该是 benz, 140000 bmw, 56000 ford, 5000 到目前为止,我的情况如下: file = "s

我有一个文件,上面有这样的行

id, car_type, cost
1, benz, 60000
2, benz, 55000
3, bmw, 30000
4, benz, 25000
5, bmw, 26000
6, ford, 5000
我想按每种
车型的总成本对该文件进行排序。例如,“
benz
”的总成本为
60000+55000+25000=14000

所以最终的输出应该是

benz, 140000
bmw, 56000
ford, 5000
到目前为止,我的情况如下:

file = "small_sample.txt"


f=open(file,"r")
lines=f.readlines()[1:]
car_and_cost ={}
for x in lines:
    cost = x.split(',')[4].rstrip('\n')
    car_and_cost.update({x.split(',')[3]:float(cost)})
f.close()
print(car_and_cost)

new_dic = {}
for key,lis in car_and_cost.items():
    new_dic[key] = sum(lis)
print(new_dic)

我几乎被卡住了。首先,我从中生成的字典总数不正确,而且我根本不知道如何按值对字典进行排序这是一种使用
csv
集合
模块的方法

Ex:

import csv
from collections import defaultdict, OrderedDict

result = defaultdict(int)

with open(filename) as infile:
    reader = csv.DictReader(infile)
    for row in reader:                    #Iterate Each row
        result[row[" car_type"]] += int(row[" cost"])   #Add costs

print(OrderedDict(sorted(result.items(), key=lambda x: x[1], reverse=True)))
OrderedDict([(' benz', 140000), (' bmw', 56000), (' ford', 5000)])
输出:

import csv
from collections import defaultdict, OrderedDict

result = defaultdict(int)

with open(filename) as infile:
    reader = csv.DictReader(infile)
    for row in reader:                    #Iterate Each row
        result[row[" car_type"]] += int(row[" cost"])   #Add costs

print(OrderedDict(sorted(result.items(), key=lambda x: x[1], reverse=True)))
OrderedDict([(' benz', 140000), (' bmw', 56000), (' ford', 5000)])

这是一种使用
csv
collections
模块的方法

Ex:

import csv
from collections import defaultdict, OrderedDict

result = defaultdict(int)

with open(filename) as infile:
    reader = csv.DictReader(infile)
    for row in reader:                    #Iterate Each row
        result[row[" car_type"]] += int(row[" cost"])   #Add costs

print(OrderedDict(sorted(result.items(), key=lambda x: x[1], reverse=True)))
OrderedDict([(' benz', 140000), (' bmw', 56000), (' ford', 5000)])
输出:

import csv
from collections import defaultdict, OrderedDict

result = defaultdict(int)

with open(filename) as infile:
    reader = csv.DictReader(infile)
    for row in reader:                    #Iterate Each row
        result[row[" car_type"]] += int(row[" cost"])   #Add costs

print(OrderedDict(sorted(result.items(), key=lambda x: x[1], reverse=True)))
OrderedDict([(' benz', 140000), (' bmw', 56000), (' ford', 5000)])
使用熊猫:

import pandas as pd
df = pd.read_csv(logFile)

result = df.groupby(' car_type').sum()
print(result)
输出:

           id    cost
 car_type            
 benz       7  140000
 bmw        8   56000
 ford       6    5000
{' benz': 140000, ' bmw': 56000, ' ford': 5000}
[[' benz', 140000], [' bmw', 56000], [' ford', 5000]]
编辑:

输出:

           id    cost
 car_type            
 benz       7  140000
 bmw        8   56000
 ford       6    5000
{' benz': 140000, ' bmw': 56000, ' ford': 5000}
[[' benz', 140000], [' bmw', 56000], [' ford', 5000]]
或者,如果您希望将它们列在列表中:

print([[k,v] for k,v in  dd.items()])
输出:

           id    cost
 car_type            
 benz       7  140000
 bmw        8   56000
 ford       6    5000
{' benz': 140000, ' bmw': 56000, ' ford': 5000}
[[' benz', 140000], [' bmw', 56000], [' ford', 5000]]
使用熊猫:

import pandas as pd
df = pd.read_csv(logFile)

result = df.groupby(' car_type').sum()
print(result)
输出:

           id    cost
 car_type            
 benz       7  140000
 bmw        8   56000
 ford       6    5000
{' benz': 140000, ' bmw': 56000, ' ford': 5000}
[[' benz', 140000], [' bmw', 56000], [' ford', 5000]]
编辑:

输出:

           id    cost
 car_type            
 benz       7  140000
 bmw        8   56000
 ford       6    5000
{' benz': 140000, ' bmw': 56000, ' ford': 5000}
[[' benz', 140000], [' bmw', 56000], [' ford', 5000]]
或者,如果您希望将它们列在列表中:

print([[k,v] for k,v in  dd.items()])
输出:

           id    cost
 car_type            
 benz       7  140000
 bmw        8   56000
 ford       6    5000
{' benz': 140000, ' bmw': 56000, ' ford': 5000}
[[' benz', 140000], [' bmw', 56000], [' ford', 5000]]

计算唯一
car_type
s的数量,然后创建该计数的字典,分配文件中的值或每个值的总和。塔达啊!你可以接受帮助你解决问题的答案!cheer查找唯一
car\u type
s的编号,然后创建该计数的字典,分配文件中的值或每个值的总和。塔达啊!你可以接受帮助你解决问题的答案!使用标准库only@Tendi编辑了我的答案。这个内存有效吗?csv不需要将整个文件加载到内存中吗?如果说文件是5GB,会发生什么?也是按最高累积值进行的最终排序cost@Tendi不,它只是一个指针。它不会将整个文件加载到内存中。使用标准库only@Tendi编辑了我的答案。这个内存有效吗?csv不需要将整个文件加载到内存中吗?如果说文件是5GB,会发生什么?也是按最高累积值进行的最终排序cost@Tendi不,它只是一个指针。它不会将整个文件加载到内存中。这看起来很有希望。但它似乎没有排序。我想把总数最高的钥匙放在第一位。所以降序排序。还有,这个规模有多大?比如说100万行。
print(OrderedDict(排序(result.items(),key=lambda x:x[1],reverse=True))
这看起来很有希望。但它似乎没有排序。我想把总数最高的钥匙放在第一位。所以降序排序。还有,这个规模有多大?例如,大约一百万行。
print(OrderedDict(排序(result.items(),key=lambda x:x[1],reverse=True))