pd.DataFrame.merge()
との本質的な違いは何ですかpd.concat()
?
これまでのところ、私が見つけたのは以下のとおりです。私の理解がどの程度完全かつ正確であるかコメントしてください。
.merge()
列 (および行インデックス) のみを使用でき、意味的にはデータベース スタイルの操作に適しています。.concat()
インデックスのみを使用してどちらの軸でも使用でき、階層インデックスを追加するオプションが提供されます。ちなみに、これにより、次の冗長性が可能になります。どちらも行インデックスを使用して 2 つのデータフレームを組み合わせることができます。
pd.DataFrame.join()
単に、使用例のサブセットの簡略表現を提供しているだけです.merge()
(Pandas は、データ分析における非常に幅広いユースケースに対応するのに優れています。特定のタスクを実行するための最適な方法を見つけるためにドキュメントを調べるのは少し大変です。)
ベストアンサー1
非常に高レベルの違いは、 はmerge()
共通列の値に基づいて 2 つ (またはそれ以上) のデータフレームを結合するために使用され (インデックスも使用できます。 およびleft_index=True
/または を使用しますright_index=True
)、 は1 つ (またはそれ以上) のデータフレームを上下に (またはオプションが 0 または 1 に設定されているconcat()
かどうかに応じて横に) 追加するために使用されていることです。axis
join()
は、インデックスに基づいて 2 つのデータフレームを結合するために使用されます。merge()
オプションを使用する代わりにleft_index=True
、 を使用できますjoin()
。
例えば:
df1 = pd.DataFrame({'Key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)})
df1:
Key data1
0 b 0
1 b 1
2 a 2
3 c 3
4 a 4
5 a 5
6 b 6
df2 = pd.DataFrame({'Key': ['a', 'b', 'd'], 'data2': range(3)})
df2:
Key data2
0 a 0
1 b 1
2 d 2
#Merge
# The 2 dataframes are merged on the basis of values in column "Key" as it is
# a common column in 2 dataframes
pd.merge(df1, df2)
Key data1 data2
0 b 0 1
1 b 1 1
2 b 6 1
3 a 2 0
4 a 4 0
5 a 5 0
#Concat
# df2 dataframe is appended at the bottom of df1
pd.concat([df1, df2])
Key data1 data2
0 b 0 NaN
1 b 1 NaN
2 a 2 NaN
3 c 3 NaN
4 a 4 NaN
5 a 5 NaN
6 b 6 NaN
0 a Nan 0
1 b Nan 1
2 d Nan 2