GroupBy-获取TotalCount

时间:2019-07-03 12:19:16

标签: c# group-by

我有这样的数据

数据

1 1 2 2 2 2 2 blank/ null 1 1 3 3 4 4 4 blank/ null blank/ null

试图获得基数(非空白行总数)和百分比列以及频率。

到目前为止已经获得了

Column  Count
 1        4
 2        5
 3        2 
 4        3

使用此代码

var result = data.GroupBy(x => x.Field<string>(xx), (row, l) => new Group { Column = row, Count = l.Count() })

我正在尝试groupby以获得类似这样的输出

Column  Count           Base      Percent
 1       4               14      28.57142857
 2       5               14      35.71428571
 3       2               14      14.28571429
 4       3               14      21.42857143

1 个答案:

答案 0 :(得分:2)

步骤

  1. 过滤掉不需要的条目(空)
  2. 获取总数
  3. 分组数据
  4. 将数据投影到所需的结果

var data = new int?[] { 1, 1, 2, 2, 2, 2, 2, null, 1, 1, 3, 3, 4, 4, 4, null, null };
var filteredData = data.Where(x => x != null);
var totalCount = filteredData.Count();
var groups = filteredData.GroupBy(x => x);
var result = groups.Select(x => new { Value = x.Key, Count = x.Count(), Percent = x.Count() * 100.0 / totalCount });

注意:分组是分组项目加键的集合。关键是您选择分组的依据。在此示例中,键为int。而且由于该组是一个集合,因此您可以在其上进行类似.Count()的操作。