複数Arrayの全組み合わせをDataFrameに変換
JuliaでDataFrameを扱う時に
leftjoinするためのベースとして
複数キーの全組み合わせを持つDataFrameが必要だったので備忘として記録
環境
Julia: 1.5
やりたいこと
AというカラムとBというカラムをキーとするDataFrameがあったとします。
Aには、["a", "b", "c"]という値が入りうるとし
Bには、["d", "e", "f"]という値が入るとした時、
以下のような、A、B列の全組み合わせを持つDataFrameを作ります。
コード
using DataFrames
arr1 = ["a", "b", "c"]
arr2 = ["d", "e", "f"]
v = vec(collect(Base.product(arr1, arr2)))
columns = (:A, :B)
data = NamedTuple{columns}.(v)
df = DataFrame(data)
解説
arr1 = ["a", "b", "c"]
arr2 = ["d", "e", "f"]
v = vec(collect(Base.product(arr1, arr2)))
まずは、2つのArrayの全組み合わせを取得します。
collectまで実行した時点では、Matrixの形式になっているため、vecでタプルの1次元配列にします。
columns = (:A, :B)
data = NamedTuple{columns}.(v)
先ほど作成したタプル配列を、ネームドタプルの配列に変換します。
配列なので . を忘れずに。
df = DataFrame(data)
methods(DataFrame)
の実行結果を見れば分かりますが、DataFrameはネームドタプルの配列を引数に取って初期化することが出来ますので、上記のプログラムで所望の結果が得られます。
参考
Iteration utilities
DataFrame construction from array of tuples