我有一个大的csv文件,它是来电数据的日志。
我的文件示例:
CompanyName High Priority QualityIssue
Customer1 Yes User
Customer1 Yes User
Customer2 No User
Customer3 No Equipment
Customer1 No Neither
Customer3 No User
Customer3 Yes User
Customer3 Yes Equipment
Customer4 No User
我的代码目前可以对数据进行排序,以便我可以获得最佳来电者。
然而,我接下来需要的是为该呼叫者找到他们的呼叫类型的计数。然后格式化如下的csv:
Top Calling Customers, Equipment, User, Neither,
Customer 3, 2, 2, 0,
Customer 1, 0, 2, 1,
Customer 2, 0, 1, 0,
Customer 4, 0, 1, 0,
我已尝试过各种各样的groupby,Counters和循环组合,但我不能在我的生活中超越第一列。
以下是我对顶级呼叫客户进行排序的代码:
data = pandas.read_csv('Copy of HEAT Data.csv', delimiter =',')
TopCustomerCallers = data['CompanyName'].value_counts()
但是,原始问题仍然存在,我现在必须使用TopCustomerCallers来计算QualityIssue并对其进行排序。希望这个问题有道理。
编辑:取出一个包含完全不相关信息的示例文件,并添加了一个新示例。还取出了之前的70行代码,换成了我在提出问题后想出的两个衬垫。
编辑:更多示例数据。真实数据超过5000行并进入AA列,但我只对客户的频率及其呼叫类型感兴趣。
答案 0 :(得分:1)
from collections import defaultdict, OrderedDict
counts = defaultdict(lambda: {"User": 0, "Equipment": 0, "Neither": 0})
with open('filename.tsv', 'rb') as fh:
reader = csv.reader(fh, delimiter='\t') # assuming it's formatted like your example above
for row in reader:
company, calltype = row[0], row[2]
counts[company][calltype] += 1
此时,你有一些看起来像这样的东西:
In [14]: dict(counts)
Out[14]:
{'Customer1': {'Equipment': 0, 'Neither': 1, 'User': 2},
'Customer2': {'Equipment': 0, 'Neither': 0, 'User': 1},
'Customer3': {'Equipment': 2, 'Neither': 0, 'User': 2},
'Customer4': {'Equipment': 0, 'Neither': 0, 'User': 1}}
根据您希望此输出结构的方式,它可能像调用csv.DictWriter
一样简单,或者您可能希望在编写项目之前利用collections.OrderedDict
对项目进行排序。
编辑:例如,要将此defaultdict转换为OrderedDict,您可以这样做:
sorted_counts = OrderedDict(sorted(counts.iteritems(), key=lambda counts_tup: sum(counts_tup[1].values())))
答案 1 :(得分:0)
我可以使用以下方式对数据进行排序:
import csv
import pandas
from collections import Counter
from collections import defaultdict, Counter
data = pandas.read_csv(filename.csv', delimiter =',')
byqualityissue = data.groupby(["CompanyName","QualityIssue"]).size()
但不是我想要的格式,然后它没有按最大数量的来电者排序。