C# Deedle AggregateRowsBy 语法

C# Deedle AggregateRowsBy Syntax

我有这样的数据集:

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# 中的用法。谁能帮我吗?谢谢!

编译器无法找出 AggregateRowsBy 调用的类型参数,最简单的修复方法是

var test2 = testdata.AggregateRowsBy<double, dynamic>(new []{ "Group1", "Group2" },
                                    new[] { "Value" },
                                    x => x.NumSum());
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 来完成。