谁能把我从痛苦中解救出来!我看不到森林中的所有树木。我有一个已填充的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>'"
我知道答案一定很简单 但要在我的笔记本落在花园里之前找到答案... ...
如果你是从一个集合中填充,你可以简单地比较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);