Deedle,用标量值乘以帧的列

时间:2016-09-08 03:28:25

标签: f# deedle

假设您有一个权重字典,需要乘以deedle框架的相应列。在python中它将是这样的:

>>> df = pd.DataFrame(np.ones((3,3)),columns=list("abc"))
>>> d = {"a":1, "b":2, "c":3}
>>> df * pd.Series(d)
     a    b    c
0  1.0  2.0  3.0
1  1.0  2.0  3.0
2  1.0  2.0  3.0

如何在Deedle中解决这个问题?

1 个答案:

答案 0 :(得分:0)

好吧,我可以用三行来制作它,但绝对不像熊猫那样:

let df = Array2D.create 3 3 1. |> Frame.ofArray2D |> Frame.indexColsWith("abc" |> Seq.toArray)
let multi = dict ['a',1.;'b',2.;'c',3.;] 
df |> Frame.getNumericCols |> Series.map (fun idx v -> multi.[idx] * v) |> Frame.ofColumns

请注意,我正在从字符串数组创建一系列字符,因此'a'

我含糊地回忆起运营商可能超负荷工作在大熊猫的数据框架上工作。你也可以用deedle做同样的事情。所以你可以说df * df',其中df'包含你的标量乘以。

这样的事情:

let df' = Array2D.init 3 3 (fun i j -> float j + 1.) |> Frame.ofArray2D |> Frame.indexColsWith("abc" |> Seq.toArray)
df * df'