如何在c#中有效地连接多个Deedle系列

本文关键字:Deedle 系列 连接 有效地 | 更新日期: 2023-09-27 18:13:18

我想用deedle将数百个系列连接到一个框架中。实现这一目标的最佳功能方式是什么?

直接的(命令式的)想法是在循环之外创建一个框架对象持有者。然后在循环中,该对象被用作序列连接的左侧。

再想想,C#尾递归?我做了一些研究,我有点失落,因为c#是否可以做尾部递归。在Tomas的书《函数式编程的现实世界》中只有f #的例子

还有人有数百列(1000行)的针框吗?对性能有很大影响吗?这听起来有点过分,但在电子表格中很常见

欢迎提出任何建议。谢谢你!casbby

如何在c#中有效地连接多个Deedle系列

创建框架的正确方法取决于您的数据来自何处。

如果你已经有了所有的系列,你想创建一个包含它们作为列的框架,那么Frame.FromColumns方法可能是你要走的路。该方法接受一个键值对的集合,其中键是列名,值是列(系列)。

下面是一个最小的示例,它创建了一个带有名称和系列的键值对数组:

var cols = new KeyValuePair<string, Series<int, object>>[]{
  KeyValue.Create("IDs", (new object[] {1,2,2}).ToOrdinalSeries() ),
  KeyValue.Create("Namess", (new object[] {"A", "B", "C"}).ToOrdinalSeries() )
};
var frame = Frame.FromColumns(cols);

我假设在您的情况下,您已经在某个集合中拥有该系列,因此函数方法是使用LINQ和Select将数据投影为正确的格式。所以你的代码可能看起来像这样:

var cols = someSource.Select(item =>
  KeyValue.Create(item.Key, item.Series));
var frame = Frame.FromColumns(cols);

FromColumns操作在封面下使用外连接,但它是优化的(例如,如果您有具有相同索引的系列)。在Deedle的c#文档中有很多额外的例子