数日前、あるグループで、アリからインタビューを受けたと言っている友人に会い、パンダの使い方について尋ねました。質問の1つは、パンダでデータを組み合わせる5つの方法です。
本日はこの機会に、パンダのデータをマージするための5つの機能を紹介します。ただし、各機能について、ここで詳しく説明するつもりはありません。具体的な使用法については、パンダの公式ドキュメントを参照してください。
- 結合は、主にインデックスベースの水平方向のマージとスプライシングに使用されます。
- マージは主に、指定された列に基づく水平方向のマージとスプライシングに使用されます。
- concatは、水平および垂直のマージとスプライシングに使用できます。
- appendは、主に垂直方向の追加に使用されます。
- 結合関数を使用して、2つのデータフレームを列ごとに結合できます。
加入
結合は、インデックスに基づく水平スプライシングです。インデックスが同じ場合、水平スプライシングが直接実行されます。インデックスに一貫性がない場合は、Nan値で埋められます。
一貫性のあるインデックス
x = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']},
index=[0, 1, 2])
y = pd.DataFrame({
'C': ['C0', 'C2', 'C3'],
'D': ['D0', 'D2', 'D3']},
index=[0, 1, 2])
x.join(y)
結果は次のとおりです。
インデックスの不整合
x = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']},
index=[0, 1, 2])
y = pd.DataFrame({
'C': ['C0', 'C2', 'C3'],
'D': ['D0', 'D2', 'D3']},
index=[1, 2, 3])
x.join(y)
結果は次のとおりです。
マージ
マージは、指定された列の水平方向のスプライシングに基づいています。この関数は、リレーショナルデータベースの接続方法に似ており、1つ以上のキーに従って異なるDatFrameを接続できます。この関数の一般的なアプリケーションシナリオは、同じ主キーに対して異なるフィールドを持つ2つのテーブルがあり、それらが主キーに従って1つのテーブルに統合されることです。
- 内部接続、左接続、右接続、外部接続など、接続方法を示すさまざまな方法パラメーターを指定できます。デフォルトは内部です。
x = pd.DataFrame({
'姓名': ['张三', '李四', '王五'],
'班级': ['一班', '二班', '三班']})
y = pd.DataFrame({
'专业': ['统计学', '计算机', '绘画'],
'班级': ['一班', '三班', '四班']})
pd.merge(x,y,how="left")
結果は次のとおりです。
concat
concat機能は、縦縫いだけでなく横縫いにも使用できます。
縦縫い
x = pd.DataFrame([['Jack','M',40],['Tony','M',20]], columns=['name','gender','age'])
y = pd.DataFrame([['Mary','F',30],['Bob','M',25]], columns=['name','gender','age'])
z = pd.concat([x,y],axis=0)
z
結果は次のとおりです。
横縫い
x = pd.DataFrame({
'姓名': ['张三', '李四', '王五'],
'班级': ['一班', '二班', '三班']})
y = pd.DataFrame({
'专业': ['统计学', '计算机', '绘画'],
'班级': ['一班', '三班', '四班']})
z = pd.concat([x,y],axis=1)
z
結果は次のとおりです。
追加
appendは、主にデータを垂直方向に追加するために使用されます。
x = pd.DataFrame([['Jack','M',40],['Tony','M',20]], columns=['name','gender','age'])
y = pd.DataFrame([['Mary','F',30],['Bob','M',25]], columns=['name','gender','age'])
x.append(y)
結果は次のとおりです。
混ぜる
Combineは、関数を使用して2つのDataFrameを列ごとに組み合わせることができます。
x = pd.DataFrame({
"A":[3,4],"B":[1,4]})
y = pd.DataFrame({
"A":[1,2],"B":[5,6]})
x.combine(y,lambda a,b:np.where(a>b,a,b))
結果は次のとおりです。
注:上記の関数は、対応する位置で最大値を返すために使用されます。