查找最频繁的元素并排序数据
Posted
技术标签:
【中文标题】查找最频繁的元素并排序数据【英文标题】:Finding most frequent element and sorting data 【发布时间】:2015-08-27 16:35:31 【问题描述】:我有一个大的 csv 文件,我想将其转换为包含相关信息的表格。
是这样的:
ComplaintNumber;CompanyName;CallerName;EmpName;CallStatus;Gen_Code;Detail Code;OtherDetail;CallDesc;QualityIssue;HighPriority;Received Data and Time; Call Type;count;Unnamed: 14;Unnamed: 15;Unnamed: 16;Unnamed: 17;Unnamed: 18;Unnamed: 19;Unnamed: 20;Unnamed: 21;Unnamed: 22;Unnamed: 23
5651;Company 1;joe;Rob;Closed;Maintenance;Code 1;;Sentence that is relatively long but not too long;No;1-No;6/11/2015 15:00;Type 1;8;;;;;;;;;;
6642;Company 1;joe;Rob;Closed;Support;Code 2;;another sentence that is relatively long but not too long;No;1-No;6/12/2015 15:00;Type 2;8;;;;;;;;;;
6893;Company 1;joe;Rob;Closed;Support;Code 2;;description and stuff;No;1-No;6/13/2015 15:00;Type 3;8;;;;;;;;;;
4535;Company 1;joe;Gwen;Closed;Maintenance;Code 4;;So and so called and said such and such;No;1-No;6/14/2015 15:00;Type 2;8;;;;;;;;;;
8655;Company 1;joe;Gwen;Closed;Support;Code 56;;Somebody needs a nap apparently;No;1-No;6/15/2015 15:00;Type 1;8;;;;;;;;;;
8656;Company 1;joe;Wendy;Closed;Computer;Code 12;;Yup just typing random notes here;No;1-No;6/12/2015 15:00;Type 1;8;;;;;;;;;;
8857;Company 1;joe;Sarah;Closed;Computer;Code 3;;Yup just typing random notes here;No;1-No;6/17/2015 15:00;Type 4;8;;;;;;;;;;
3348;Company 1;joe;John;Closed;Computer;Code;Red;Yup just typing random notes here;No;1-No;6/18/2015 15:00;Type 4;8;;;;;;;;;;
6679;Company 2;Belinda;John;Closed;Maintenance;Code 4;;Yup just typing random notes here;No;1-No;6/4/2015 19:00;Type 4;7;;;;;;;;;;
5510;Company 2;Belinda;Bob;Closed;Support;Code 1;;Yup just typing random notes here;No;;6/20/2015 15:00;Type 4;7;;;;;;;;;;
7711;Company 2;Belinda;Bob;Closed;Support;Code 1;;Yup just typing random notes here;No;1-No;6/21/2015 12:00;Type 4;7;;;;;;;;;;
6212;Company 2;Belinda;Bob;Closed;Support;Code 4;;Yup just typing random notes here;No;1-No;6/22/2015 15:00;Type 2;7;;;;;;;;;;
4413;Company 2;Belinda;Bob;Closed;Support;Code 34;;Yup just typing random notes here;No;1-No;6/23/2015 5:00;Type 2;7;;;;;;;;;;
1444;Company 2;Belinda;Bob;Closed;Support;Code 2;Blue;Yup just typing random notes here;No;1-No;6/23/2015 15:00;Type 2;7;;;;;;;;;;
5515;Company 2;Rodger;Yolanda;Closed;Maintenance;Code 1;;Yup just typing random notes here;No;1-No;6/25/2015 15:00;Type 2;7;;;;;;;;;;
1756;Company 3;Janet;Yolanda;Closed;Maintenance;Code 2;;Yup just typing random notes here;No;1-No;6/26/2015 15:00;Type 2;5;;;;;;;;;;
1557;Company 3;Janet;Yolanda;Closed;Computer;Code 4 ;;Yup just typing random notes here;No;1-No;6/27/2015 15:00;Type 2;5;;;;;;;;;;
1238;Company 3;Janet;Yolanda;Closed;Computer;Code 45;Purple;Yup just typing random notes here;No;1-No;6/28/2015 15:00;Type 1;5;;;;;;;;;;
1729;Company 3;Richard;Steve;Closed;Computer;Code 2 ;;Yup just typing random notes here;No;1-No;6/29/2015 15:00;Type 1;5;;;;;;;;;;
2340;Company 3;Richard;Fred;Closed;Support;Code 4;Yellow;Yup just typing random notes here;No;1-No;6/30/2015 15:00;Type 3;5;;;;;;;;;;
2131;Company 4;Pamela;Rob;Closed;Maintenance;Code 5;;Yup just typing random notes here;No;1-No;7/1/2015 15:00;Type 3;3;;;;;;;;;;
2662;Company 4;Pamela;Rob;Closed;Maintenance;Code 6;;Yup just typing random notes here;No;1-No;7/2/2015 15:00;Type 3;3;;;;;;;;;;
2833;Company 4;Pamela;Rob;Closed;Maintenance;Code 7;;Yup just typing random notes here;No;1-No;7/3/2015 15:00;Type 3;3;;;;;;;;;;
2564;Company 5;Stan;Steve;Closed;Computer;Code 8;;Yup just typing random notes here;No;1-No;7/4/2015 15:00;Type 3;1;;;;;;;;;;
2225;Company 6;Lee;Steve;Closed;Computer;Code 9;;Yup just typing random notes here;No;1-No;7/5/2015 15:00;Type 4;1;;;;;;;;;;
1326;Company 7;Jackie;Steven;Closed;Support;Code 10;;Yup just typing random notes here;No;1-No;7/6/2015 15:00;Type 1;1;;;;;;;;;;
7227;Company 8;Jake;Rob;Closed;Support;Code 11;;Yup just typing random notes here;No;1-No;7/7/2015 15:00;Type 2;1;;;;;;;;;;
4228;Company 9 ;Steve;Wendy;Closed;Computer;Code 12;;Yup just typing random notes here;No;1-No;7/8/2015 15:00;Type 3;1;;;;;;;;;;
我想制作一个表格,其中前五位来电者作为标题,在 EmpName(接听该客户最多电话的人)、Gen_code 和 最近 的句子下方(呼叫还有一个接收日期和时间列)CallDesc。
输出将像这张表一样排列(显然有不同的输入)
即使只是有关如何解决此问题的指导,我也将不胜感激。伪代码很好。如果有一种快速、简单的方法,那就更好了!
到目前为止,我已对列表进行了排序,以使出现频率最高的客户位于列表顶部。但是从那里我不知道如何获取最新的通话描述,甚至不知道如何只选择前五名。
【问题讨论】:
在文本编辑器(不是excel)中打开文件,然后粘贴一些代码。 @LiamFoley 喜欢吗? 解决你的例子真的很难,因为字段之间没有明确的分隔符。您可以使用 df.to_csv() 并发布;) 很高兴这样做,但有点失落。它已经在 csv 中,但是当我将其复制过来时,它不会保留逗号作为分隔符。我如何保留它们? 使用记事本打开csv 【参考方案1】:怎么样
按调用者排序.sort('callers', ascending = False)
将调用者设置为索引.set_index('callers')
选择您感兴趣的其他列
转置.T
【讨论】:
我认为我最苦恼的事情是挑选前五名客户(他们已经与示例类似,其中 counts 是他们致电的次数)并找到最近的通话描述。也许我需要做一些 for 循环?【参考方案2】:在 SQL 中执行时,这可能是最干净/最快的,只要您觉得舒服即可。假设您已使用您的数据创建了一个表,此查询将为您提供前 5 位客户:
create temporary table top_5 as
select * from (select CallerName,max(count) as num_calls
from complaints group by CallerName) order by num_calls desc limit 5;
select CallerName, num_calls,
(select EmpName from complaints where CallerName=c.CallerName order by count desc limit 1) as top_employee,
(select CallDesc from complaints where CallerName=c.CallerName order by Received_Data_and_Time desc limit 1) as recent_desc,
(select Gen_code from complaints where CallerName=c.CallerName order by Received_Data_and_Time desc limit 1) as recent_gencode
from complaints c join top_5 on top_5.CallerName=c.CallerName;
当然,您需要确保在输入数据库时可以正确地对日期进行排序,或者您可以使用某种字符串来从您想要使用的任何数据库中解析日期。 Sqlite 可能是我的偏好,并且非常适合大多数报告风格的任务,只要您在过去 20 年中没有向 Comcast 报告投诉。
【讨论】:
有趣,我以前从未使用过 SQL,但我会试试这个(可能使用 Access)感谢您的输入!以上是关于查找最频繁的元素并排序数据的主要内容,如果未能解决你的问题,请参考以下文章