2つのパンダデータフレームを組み合わせてマトリックスを作成したいと思います。2つのデータフレームは共通のインデックス値を共有せず、実際には独立しています。代わりに、2セットのインデックスを使用して、2つのインデックスの可能なすべての組み合わせを持つ階層インデックスを使用して新しいデータフレームを生成したいと思います。列は、元のデータフレームから値を取得する必要があります。
結合したい2つのデータフレームの簡略版を次に示します。
df1
Cat Freq
1.1 A 4
1.2 B 8
1.3 C 2
1.4 A 5
df2
Cat Freq
2.1 A 4
2.2 C 4
2.3 C 2
2.4 A 7
そして、これが私が作成したいものです:
df_merged
Cat(1) Freq(1) Cat(2) Freq(2)
1.1 2.1 A 4 A 4
2.2 A 4 C 4
2.3 A 4 C 2
2.4 A 4 A 7
1.2 2.1 B 8 A 4
2.2 B 8 C 4
2.3 B 8 C 2
.. ... .... ....... ....... .......
.. ... .... ........ ....... .......
最終的には、頻度が最大の列に基づいて、カテゴリ文字(df1またはdf2のいずれかから発生)を使用して新しい列を作成したいと思います。これで行列を作ることができます。上記の形式でデータを取得できれば、この最後のステップは非常に簡単だと思います。
どうもありがとう!
使用reindex
の両方によってDataFrames
によってMultiIndex
作成されfrom_product
、最後concat
とadd_suffix
:
mux = pd.MultiIndex.from_product([df1.index, df2.index])
df1 = df1.reindex(mux, level=0)
df2 = df2.reindex(mux, level=1)
df = pd.concat([df1.add_suffix('(1)'), df2.add_suffix('(2)')], axis=1)
print (df)
Cat(1) Freq(1) Cat(2) Freq(2)
1.1 2.1 A 4 A 4
2.2 A 4 C 4
2.3 A 4 C 2
2.4 A 4 A 7
1.2 2.1 B 8 A 4
2.2 B 8 C 4
2.3 B 8 C 2
2.4 B 8 A 7
1.3 2.1 C 2 A 4
2.2 C 2 C 4
2.3 C 2 C 2
2.4 C 2 A 7
1.4 2.1 A 5 A 4
2.2 A 5 C 4
2.3 A 5 C 2
2.4 A 5 A 7
または、インデックス値の損失を回避するために、merge
withによるクロス結合を使用しreset_index
ます。
df = (df1.reset_index().assign(A=1)
.merge(df2.reset_index().assign(A=1), on='A', suffixes=('(1)','(2)'))
.set_index(['index(1)','index(2)'])
.drop('A', axis=1)
.rename_axis((None,None)))
print (df)
Cat(1) Freq(1) Cat(2) Freq(2)
1.1 2.1 A 4 A 4
2.2 A 4 C 4
2.3 A 4 C 2
2.4 A 4 A 7
1.2 2.1 B 8 A 4
2.2 B 8 C 4
2.3 B 8 C 2
2.4 B 8 A 7
1.3 2.1 C 2 A 4
2.2 C 2 C 4
2.3 C 2 C 2
2.4 C 2 A 7
1.4 2.1 A 5 A 4
2.2 A 5 C 4
2.3 A 5 C 2
2.4 A 5 A 7
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加