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

C# C Deedle Dataframe比较列以创建新的结果列,c#,frame,calculated-columns,deedle,C#,Frame,Calculated Columns,Deedle,请有人帮我摆脱痛苦!尽管有那么多树,我还是看不见森林。我有一个填充的Deedle框架,其类型为: 框架MyPopulatedFrame 我不会让您对初始填充例程感到厌烦,但它打印出来的value1和value2列很好,没有问题 value1, value2 1,2 10,5 100,200 etc etc 然后,我可以添加以下代码来对两列求和,这在整个系列中也很有效: MyPopulatedFrame.AddColumnvalue1add2,PairOHLCVFrame.GetColumnva

请有人帮我摆脱痛苦!尽管有那么多树,我还是看不见森林。我有一个填充的Deedle框架,其类型为:

框架MyPopulatedFrame

我不会让您对初始填充例程感到厌烦,但它打印出来的value1和value2列很好,没有问题

value1, value2
1,2
10,5
100,200
etc etc
然后,我可以添加以下代码来对两列求和,这在整个系列中也很有效:

MyPopulatedFrame.AddColumnvalue1add2,PairOHLCVFrame.GetColumnvalue1+PairOHLCVFrame.GetColumnvalue2

它在帧的末尾给了我一个令人愉快的小计算列,每一行都有正确的值。i、 e

value1, value2, value1add2
1,2,3
10,5,15
100,200,300
etc etc
我真正想做的是,根据value1大于value2,用1或0填充另一列。代码应该如下所示:

MyPopulatedFrame.AddColumnisValue1是否创建一个值2,PairOHLCVFrame.GetColumnvalue1>PairOHLCVFrame.GetColumnvalue2?1 : 0;

但这甚至无法编译。给出的设计时间误差为:

运算符“>”不能应用于“Series”和“Series”类型的操作数


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

如果你是从一个集合中填充,你可以简单地比较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);

如果从集合中填充,只需比较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);

太好了,谢谢。为了保持整洁,我把它压缩成了一行,我确信它看起来和我今天早上花了3个小时摆弄的那行代码一模一样!有时它需要新鲜的眼睛,我感谢你的帮助。我将在最初的两列放置一段时间后再填充它,因此最终结果如下:MyPopulatedFrame.AddColumnvalue1add2,MyPopulatedFrame.Rows.Selectx=>x.Value.GetAsvalue1x.Value.GetAsvalue1x.Value.GetAsvalue1x.Value.GetAsvalue1