2016-09-08 9 views
1

Предположим, у вас есть словарь весов, который нужно умножить на соответствующий столбец рамки деды. В python это будет примерно так:Deedle, умножая столбцы кадра на скалярные значения

>>> 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

Ну, я могу сделать это в три линии, но, безусловно, не так, как succint панд:

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'.

Я смутно помню, что операторы, возможно, перегружены, чтобы работать с файловым кадром в пандах. Вы можете сделать то же самое с дедле. Итак, вы можете сказать df * df', где df' содержит ваши скаляры для умножения.

Что-то вроде этого:

let df' = Array2D.init 3 3 (fun i j -> float j + 1.) |> Frame.ofArray2D |> Frame.indexColsWith("abc" |> Seq.toArray) 
df * df' 
Смежные вопросы