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

问题描述 投票:1回答:1

谁能把我从痛苦中解救出来!我看不到森林中的所有树木。我有一个已填充的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"。

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

我真正想做的是用1或0填充另一列,取决于value1大于value2。代码应该是这样的。

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>'"

我知道答案一定很简单 但要在我的笔记本落在花园里之前找到答案... ...

c# frame calculated-columns deedle
1个回答
0
投票

如果你是从一个集合中填充,你可以简单地比较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);
© www.soinside.com 2019 - 2024. All rights reserved.