Python3.7.4でPandasを使ってデータの結合をしようとしています。
IDをキーとして複数のDataFrameを統合して一つの大きなDataFrameに入れようとしています。
テーブル1の列 :ID、A、B、C
テーブル2の列 :ID、D、E、F
テーブル3の列 :ID、G、H、I
統合テーブルの列 :ID、A、B、C、D、E、F、G、H、I
・この時、テーブル1、2、3はいづれか、またはすべて存在しない場合もありますが、統合テーブルの列としては固定でID、A、B、C、D、E、F、G、H、Iを持っておきたいです。
・また、行数が違う場合でも連結したいです。
具体的に書くとこのようなイメージです。
テーブル1
ID A B C
id1 a1 b1 c1
id2 a2 b2 c2
id3 a3 b3 c3
テーブル2:なし
テーブル3
ID G H I
id1 g1 h1 i1
id2 g2 h2 i2
id3 g3 h3 i3
id4 g4 h4 i4
統合テーブル(ほしい結果)
ID A B C D E F G H I
id1 a1 b1 c1 g1 h1 i1
id2 a2 b2 c2 g2 h2 i2
id3 a3 b3 c3 g3 h3 i3
id4 g4 h4 i4
columnDf = pd.DataFrame(columns=['ID', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'])
table1Df = pd.DataFrame({
'ID': ['id1', 'id2', 'id3'],
'A' : ['a1' , 'a2' , 'a3'],
'B' : ['b1' , 'b2' , 'b3'],
'C' : ['c1' , 'c2' , 'c3']},
index = [0, 1, 2])
table3Df = pd.DataFrame({
'ID': ['id1', 'id2', 'id3', 'id4'],
'G': ['g1' , 'g2' , 'g3' , 'g4'],
'H': ['h1' , 'h2' , 'h3' , 'h4'],
'I': ['i1' , 'i2' , 'i3' , 'i4']},
index = [0, 1, 2, 3])
#【試したこと】
concat
concatedDf = pd.concat([columnDf, table1Df, table3Df], sort=True)
A B C D E F G H I ID
0 a1 b1 c1 NaN NaN NaN NaN NaN NaN id1
1 a2 b2 c2 NaN NaN NaN NaN NaN NaN id2
2 a3 b3 c3 NaN NaN NaN NaN NaN NaN id3
0 NaN NaN NaN NaN NaN NaN g1 h1 i1 id1
1 NaN NaN NaN NaN NaN NaN g2 h2 i2 id2
2 NaN NaN NaN NaN NaN NaN g3 h3 i3 id3
3 NaN NaN NaN NaN NaN NaN g4 h4 i4 id4
となりうまくいきません。同じidのところは同じ行の該当の列に値を入れたいです。
concat その2
concatedDf = pd.concat([columnDf, table1Df, table3Df], keys=['ID'])
print(concatedDf)
結果
Empty DataFrame
Columns: [ID, A, B, C, D, E, F, G, H, I]
Index: []
merge
mergedDf = columnDf.merge(table1Df, on='ID')
mergedDf = mergedDf.merge(table3Df, on='ID')
print(mergedDf)
結果
Empty DataFrame
Columns: [A_x, B_x, C_x, D, E, F, G, H, I, ID, A_y, B_y, C_y]
Index: []
以下のような結果を得るにはどうすればいいかご教授をお願い致します。
' ID A B C D E F G H I
0 id1 a1 b1 c1 NaN NaN NaN g1 h1 i1
1 id2 a2 b2 c2 NaN NaN NaN g2 h2 i2
2 id3 a3 b3 c3 NaN NaN NaN g3 h3 i3
3 id4 NaN NaN NaN NaN NaN NaN g4 h4 i4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/08 00:38
2019/10/08 01:34