c# - 聚合来自两个集合的数据
问题描述
我有一个关于 LINQ 和聚合数据的问题。我有两个 csv 文件,其中填充了我用来练习的虚拟数据。
第一个 csv 文件(因子)包含以下字段:
- 邮政编码
- 因子类型
- 因子值
样本数据
- 31513,Type1,0.619046413
- 31515,Type1,0.62013599
- 31563,Type1,0.912988865
- 31513,Type2,0.619046413
- 31515,Type2,0.62013599
- 31563,Type2,0.912988865
- 31513,Type3,0.619046413
- 31515,Type3,0.62013599
- 31563,Type3,0.912988865
第二个 csv 文件(Counties)包含以下字段:
- 邮政编码
- 县
样本数据
- 31513,申请
- 31515,申请
- 31563,申请
- 31624,阿特金森
- 31642,阿特金森
- 31650,阿特金森
- 31510,培根
- 39870,贝克
- 31034,鲍德温
- 31059,鲍德温
- 31061,鲍德温
- 31062,鲍德温
我正在尝试使用 LINQ 按县获得 FactorType 的平均值。我有一个查询,它按县返回每个 ZipCode 的 FactorType,代码和输出的屏幕截图如下。
var query =
from county in countyRecords
join factor in factorRecords on county.Zipcode equals factor.Zipcode
into factorGroup
orderby county.County
select new CountyFactor
{
cf_county = county,
cf_factors = factorGroup
} into result
group result by result.cf_county.County;
我的目标是获得每种因素类型的平均值,例如:
县名
- 平均类型1
- 平均类型2
- 平均类型3
我的想法是获取第一个查询的结果并在第二个查询中使用它们来获得这些结果,但我不知道该怎么做。下面的代码是据我所知,但不知道如何完成它。
var query2 =
from data in query
group data by data.Key into averageGroup
select new
{
average = averageGroup.Average()
}
感谢您花时间看这个!
解决方案
countyRecords.Join( FactorRecords, c => c.ZipCode, f => f.ZipCode, (c, f) => new { County = c, Factor = f }).GroupBy(Factor.Type).Select( x=> new { x.key, x.Sum(Average) }).ToList( );
我不明白你是否需要所有平均值的总和。将 sum 替换为 max with 获得最大平均值, min 为最小平均值, Average 为它们的平均值。
推荐阅读
- linux - 启动时触发 ifup wwan0
- python - Python中没有多维集合库吗?
- python - 将 float dtype 数据帧转换为 string dtype 数据帧(NaN 变为 '0')
- tcl - 在字典中的特定点插入新值
- node.js - 无法通过调用 Meteor HTTP 获取请求获取访问令牌
- r - 日期是否有任何(统计)指数检查频率?
- r - 用另一个数据框的列填充数据框的堆叠箱线图
- python - 使用 Python 在 Google 地球引擎中上传资产?
- opengl - 用阴影渲染行星周围的大气
- flutter - 输入'未来
- >' 不是“未来”类型的子类型
- >'