Python通过Groupby实现分组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python通过Groupby实现分组相关的知识,希望对你有一定的参考价值。
参考技术A 如果有对list里的元素按照某个字段进行分组的需求的话,可以通过itertools模块中的groupby实现。举例,list中包含3个元素,希望通过country字段进行分组,再按组操作,通过itemgetter可以取dict中key。
效果:
也可以通过lambda取dict中的字段。
除此之外,还可以实现自定义分组
效果:
LINQ技巧:如何通过多次调用GroupBy实现分组嵌套
问题如上,解决如下,目标在最下面:结果:
using System; using System.Linq; using System.Collections.Generic; namespace ConsoleApplication1 { class Program { public class Sdata { public string gather; public int shotcount; } static void Main(string[] args) { var m = new[]{ new Sdata{gather = "100002",shotcount = 28}, new Sdata{gather = "100002", shotcount =44}, new Sdata{gather = "100003", shotcount = 8}, new Sdata{gather = "100003", shotcount = 20}, new Sdata{gather = "100004", shotcount = 55}, new Sdata{gather = "100004", shotcount = 60}, new Sdata{gather = "100005", shotcount = 10}, new Sdata{gather = "100005", shotcount = 60}, new Sdata{gather = "100006", shotcount = 24}, new Sdata{gather = "100006", shotcount = 75}, new Sdata{gather = "100010", shotcount = 41}, new Sdata{gather = "100010", shotcount = 81}, new Sdata{gather = "100012", shotcount = 75}, new Sdata{gather = "100012", shotcount = 100}, }; var q2 = from s in m group s by s.gather into gatherGroup select new { gather = gatherGroup.Key, shotcountGroups = from s2 in gatherGroup group s2 by s2.shotcount into shotcountGroups select new { shotcount = shotcountGroups.Key, //Days = // from s3 in shotcountGroups // orderby s3.Day // select s3.Day } }; foreach(var item in q2) { Console.WriteLine("1gather={0}",item.gather); foreach(var itme2 in item.shotcountGroups) { Console.WriteLine("\\tshotcount = {0}",itme2.shotcount); } } var q = m.GroupBy( s => s.gather, (gather, gatherGroup) => new { gather, shotcountGroups = gatherGroup.GroupBy( s2 => s2.shotcount, (shotcount, shotcountGroups) => new { shotcount, //Days = shotcountGroups.OrderBy(s3 => s3.Day).Select(s3 => s3.Day) } ) } ); List<object> listobj = new List<object>(); List<object> obj = new List<object>(); foreach (var elem in q) //foreach (var elem in q2) { int tc = elem.shotcountGroups.Count(); var d=new List<object>() ; Console.WriteLine("2gather = {0}", elem.gather); d.Add(elem.gather); foreach (var elem2 in elem.shotcountGroups) { Console.WriteLine("\\tshotcount = {0}", elem2.shotcount); //foreach (var day in elem2.Days) // Console.WriteLine("\\t\\tDay = {0}", day); d.Add(elem2.shotcount); } Console.WriteLine("eachobj is {0}",d.Count()); listobj.Add(d); } Console.WriteLine("listobj is {0}", listobj.Count); foreach (var mdata in listobj) { Console.WriteLine("listobj is {0}", listobj.ToList()); } Console.Read(); } } }
gather = 100002
shotcount = 28
shotcount = 44
gather = 100003
shotcount = 8
shotcount = 20
gather = 100004
shotcount = 55
shotcount = 60
gather = 100005
shotcount = 10
shotcount = 60
gather = 100006
shotcount = 24
shotcount = 75
gather = 100010
shotcount = 41
shotcount = 81
gather = 100012
shotcount = 75
shotcount = 100
以上是关于Python通过Groupby实现分组的主要内容,如果未能解决你的问题,请参考以下文章
SQL基础教程(第2版)第3章 聚合与排序:3-2 对表进行分组