C# Deedle Dataframe 比较列以创建新的结果列

C# Deedle Dataframe compare columns to create new resulting column

请有人把我从痛苦中解救出来!我看不到所有这些树的森林。我有一个填充的 Deedle 框架,其有效类型为:

Frame<int, string> MyPopulatedFrame

我不会让您厌烦最初的填充例程,但它可以很好地打印 "value1" 和 "value2" 列,没有问题。

value1, value2
1,2
10,5
100,200
etc etc

然后我可以添加这段代码来计算两列的总和,这在整个系列中也能正常工作:

MyPopulatedFrame.AddColumn("value1add2", PairOHLCVFrame.GetColumn<double>("value1") + PairOHLCVFrame.GetColumn<double>("value2"));

它在我的框架末尾为我提供了一个令人愉快的小计算列,每行都有正确的值。即

value1, value2, value1add2
1,2,3
10,5,15
100,200,300
etc etc

我真正想做的是用 1 或 0 填充另一列,具体取决于值 1 是否大于值 2。代码应如下所示:

MyPopulatedFrame.AddColumn("isValue1GreaterThanValue2", PairOHLCVFrame.GetColumn<double>("value1") > PairOHLCVFrame.GetColumn<double>("value2") ? 1 : 0);

但这甚至无法编译。给出设计时错误:

"Operator '>' cannot be applied to operands of type 'Series<int, double>' and 'Series<int, double>'"

我知道这个问题的答案一定很简单,但这是在我的笔记本电脑落在花园里之前到达那里的情况...

如果您从一个集合中填充,您可以简单地比较 value1 和 value2 并将结果存储在一个系列中。

 var comparedResult = objects.Select(x => x.Value1 > x.Value2? 1:0).ToOrdinalSeries();
    MyPopulatedFrame.AddColumn("IsGreater", comparedResult);

如果您需要从另一个数据框中获取值列,请尝试以下方法。

  var newList = dfObjects.Rows.Select(x => new { Value1 = x.Value.GetAs<int>("Value1"),
                   Value2 = x.Value.GetAs<int>("Value2")
               }).Observations;
                var comparedResult = newList.Select(x => x.Value.Value1 >= x.Value.Value2 ? 1 : 0).ToOrdinalSeries();
                dfObjects.AddColumn("IsGreater", comparedResult);