私は奇妙な距離メトリックを持つものに対してペアワイズ距離を行っています。私は{(key_A, key_B):distance_value}
のような辞書を持っており、私は距離行列のように対称のpd.DataFrame
を作りたいと思っています。パンダの辞書を対称/距離行列に変換する最も効率的な方法
これを行う最も効率的な方法は何ですか?私は1つの方法を見つけましたが、これを実行する最良の方法のようには見えません。このタイプの操作を行うNumPy
またはPandas
に何かがありますか?またはちょうどより速い方法?私の方法は、あなたが探している距離行列に、1.46 ms per loop
np.random.seed(0)
D_pair_value = dict()
for pair in itertools.combinations(list("ABCD"),2):
D_pair_value[pair] = np.random.randint(0,5)
D_pair_value
# {('A', 'B'): 4,
# ('A', 'C'): 0,
# ('A', 'D'): 3,
# ('B', 'C'): 3,
# ('B', 'D'): 3,
# ('C', 'D'): 1}
D_nested_dict = defaultdict(dict)
for (p,q), value in D_pair_value.items():
D_nested_dict[p][q] = value
D_nested_dict[q][p] = value
# Fill diagonal with zeros
DF = pd.DataFrame(D_nested_dict)
np.fill_diagonal(DF.values, 0)
DF
ありがとうございました!私は今日何か新しいことを学んだ: 'scipy.spatial.distance.squareform' – MaxU
方法2:それは!ニース、おかげで 'ルート' –