2016-09-08 10 views
1

デイドルフレームのそれぞれの列に乗算する必要がある重みの辞書があるとします。 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 

ディードルでこれをどうやって行くのですか?

答えて

1

まあ、私は3行でそれを作る間違いなくパンダほど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' 
関連する問題