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);
请有人把我从痛苦中解救出来!我看不到所有这些树的森林。我有一个填充的 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);