Juliaで複数Arrayの全組み合わせを持つDataFrameを作成


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