我有这样的数据集:
Group1 Group2 Value
A 1 350.6
A 2 30.5
B 1 34.1
B 1 500.2
C 2 20.7
C 2 35我想通过Group1和Group2聚合这个数据集,然后汇总和值:
Group1 Group2 Value
A 1 350.6
A 2 30.5
B 1 534.3
C 2 55.7我知道在C#中,Deedle有一个叫做"AggregateRowsBy“的方法,但是它的F#语法不适用于C#。所以我尝试过这样的方法,但没有用:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using Deedle;
namespace testDeedle
{
class Program
{
static void Main(string[] args)
{
var testdata = Frame.ReadCsv(@"test_data.csv");
var test2 =testdata.AggregateRowsBy(new string[2] {"Group1","Group2"},
new string[1] {"Value"},
x=>x.NumSum());
test2.Print();
}
}
}不幸的是,我还没有找到足够的在线资源来演示Deedle在C#中的使用。有人能帮我吗?谢谢!
发布于 2016-12-05 15:22:23
编译器无法计算出AggregateRowsBy调用的类型参数,最简单的修复方法是
var test2 = testdata.AggregateRowsBy<double, dynamic>(new []{ "Group1", "Group2" },
new[] { "Value" },
x => x.NumSum());发布于 2016-12-05 15:33:17
var result = testdata.Tables[0].AsEnumerable()
.GroupBy(x =>new { Group1 = x.Field<string>("Group1"), Group2 = x.Field<int>("Group2") })
.Select(g=> new { Group1 = g.Key.Group1, Group2 = g.Key.Group2, Value = g.Sum(x=>x.Field<int>("Value"))}).ToList();你可以用linq来做。
https://stackoverflow.com/questions/40977391
复制相似问题