1. ホーム
  2. python

[解決済み] pandasのカルテジアン積

2022-05-18 10:59:23

質問

pandasのデータフレームが2つあります。

from pandas import DataFrame
df1 = DataFrame({'col1':[1,2],'col2':[3,4]})
df2 = DataFrame({'col3':[5,6]})     

彼らのデカルト積を得るためのベストプラクティスは何ですか(もちろん、私のように明示的に書かずに)?

#df1, df2 cartesian product
df_cartesian = DataFrame({'col1':[1,2,1,2],'col2':[3,4,3,4],'col3':[5,5,6,6]})

どのように解決するのですか?

最近のPandasのバージョン(>= 1.2)では、この機能を内蔵した merge になっているので、できるようになっています。

from pandas import DataFrame
df1 = DataFrame({'col1':[1,2],'col2':[3,4]})
df2 = DataFrame({'col3':[5,6]})    

df1.merge(df2, how='cross')

これは以前のpandas < 1.2の答えと同等ですが、より読みやすくなっています。


pandas < 1.2の場合です。

各行で繰り返されるキーがある場合、(SQLのように)mergeを使ってデカルト積を生成できます。

from pandas import DataFrame, merge
df1 = DataFrame({'key':[1,1], 'col1':[1,2],'col2':[3,4]})
df2 = DataFrame({'key':[1,1], 'col3':[5,6]})

merge(df1, df2,on='key')[['col1', 'col2', 'col3']]

出力します。

   col1  col2  col3
0     1     3     5
1     1     3     6
2     2     4     5
3     2     4     6

ドキュメントはこちらをご覧ください。 http://pandas.pydata.org/pandas-docs/stable/merging.html