C# Deedle Dataframe ReplaceColumn <MIssing> 值
C# Deedle Dataframe ReplaceColumn <MIssing> values
我很难弄清楚这个问题。首先,我是 Deedle 的新手,如果我在这里问一个愚蠢的问题,请原谅我。
所以我有一个父框架,我正在过滤产生一个子框架
var subFrame = parentFrame.Where(kvp => kvp.Value.GetAs<string>("ColA") == "ValueA" && kvp.Value.GetAs<string>("ColB") == "ValueB");
var subCol = subFrame.GetColumn<decimal>("ColDecimal1");
subCol = subFrame.GetColumn<decimal>("ColDecimal2");
parentFrame.ReplaceColumn("ColDecimal1", subCol);
当我这样做时,它几乎给了我想要的结果。列值确实与父行的键值对齐,但是,与最初通过 subFrame/filtering 获取的键值不匹配的键的“ColDecimal1”值为 。我知道这是 Deedle 文档中所述的内容,但我正试图找到解决此问题的方法。我的偏好可能是在 C# 和 F# 中获得一些示例,F# 对我来说有点陌生,所以很难理解。
无论如何,先谢谢你了。
subFrame
只有部分行的数据(由您的过滤器指定)。 ReplaceColumn
将替换一个列,为新列没有值的所有行键添加 <Missing>
,这就是为什么你看到你所看到的。
如果您希望得到的结果是过滤器选择的行的新值,但所有其他行的旧值,您可以使用 Zip
和 Select
.
例如,假设我有两个系列:
let parentCol = series [1 => 1.0; 2 => 2.0; 3 => 3.0]
let subCol = series [1 => 1.1 ]
subCol
有键 1
的数据。现在,我想将 parentCol
中的值 1.0
替换为 subCol
中的值,以便在 F# 中执行此操作,您将编写(假设 [=21= 中没有缺失值) ]):
parentCol.Zip(subCol, JoinKind.Left).SelectValues(fun (v1, v2) ->
if v2.HasValue then v2.Value else v1.Value
)
C# 中唯一不同的是您使用 Item1
和 Item2
以及不同的 lambda 语法访问元组元素。我没有测试这个,但应该是:
parentCol.Zip(subCol, JoinKind.Left).SelectValues(v =>
v.Item2.HasValue ? v.Item2.Value : v.Item1.Value);
我很难弄清楚这个问题。首先,我是 Deedle 的新手,如果我在这里问一个愚蠢的问题,请原谅我。
所以我有一个父框架,我正在过滤产生一个子框架
var subFrame = parentFrame.Where(kvp => kvp.Value.GetAs<string>("ColA") == "ValueA" && kvp.Value.GetAs<string>("ColB") == "ValueB");
var subCol = subFrame.GetColumn<decimal>("ColDecimal1");
subCol = subFrame.GetColumn<decimal>("ColDecimal2");
parentFrame.ReplaceColumn("ColDecimal1", subCol);
当我这样做时,它几乎给了我想要的结果。列值确实与父行的键值对齐,但是,与最初通过 subFrame/filtering 获取的键值不匹配的键的“ColDecimal1”值为 。我知道这是 Deedle 文档中所述的内容,但我正试图找到解决此问题的方法。我的偏好可能是在 C# 和 F# 中获得一些示例,F# 对我来说有点陌生,所以很难理解。
无论如何,先谢谢你了。
subFrame
只有部分行的数据(由您的过滤器指定)。 ReplaceColumn
将替换一个列,为新列没有值的所有行键添加 <Missing>
,这就是为什么你看到你所看到的。
如果您希望得到的结果是过滤器选择的行的新值,但所有其他行的旧值,您可以使用 Zip
和 Select
.
例如,假设我有两个系列:
let parentCol = series [1 => 1.0; 2 => 2.0; 3 => 3.0]
let subCol = series [1 => 1.1 ]
subCol
有键 1
的数据。现在,我想将 parentCol
中的值 1.0
替换为 subCol
中的值,以便在 F# 中执行此操作,您将编写(假设 [=21= 中没有缺失值) ]):
parentCol.Zip(subCol, JoinKind.Left).SelectValues(fun (v1, v2) ->
if v2.HasValue then v2.Value else v1.Value
)
C# 中唯一不同的是您使用 Item1
和 Item2
以及不同的 lambda 语法访问元组元素。我没有测试这个,但应该是:
parentCol.Zip(subCol, JoinKind.Left).SelectValues(v =>
v.Item2.HasValue ? v.Item2.Value : v.Item1.Value);