2017-12-12 6 views
1

私はどのようにマージするか分からない3 dfsを持っています。パンダ3参加するdfs

DF1:

ID Name XCount 
111 aaa 3 
222 bbb 2 
333 ccc 3 

DF2:

ID Name YCount 
111 abc 3 
222 bbb 2 
444 ddd 1 

DF3:

ID Name YCount 
111 aaa 2 
222 bbb 3 
555 eee 4 

目標:

ID Name XCount YCount Zcount 
111 aaa 3 NA 2 
111 abc NA 3 NA 
222 bbb 2 2 3 
333 ccc 2 NA NA 
444 ddd NA 1 NA 
555 eee NA NA 4 

連結しようとしましたが、IDと名前のフィールドが一致しませんでした。

ありがとうございました! df = pd.concat(pd.DataFrame(i) for i in (data1,data2,data3)).groupby(['ID','Name']).sum().reset_index()

+0

連結が動作するはずです。あなたのコードを見せてください。 –

+0

私はそれを取り戻す。 groupbyも追加する必要があります。 –

答えて

3

はあなたがCONCATとGROUPBYでそれを行うことができます

df1.merge(df2, on = ['ID', 'Name'],how = 'outer').merge(df3, on = ['ID', 'Name'], how = 'outer') 

    ID Name XCount YCount_x YCount_y 
0 111 aaa  3.0  NaN   2.0 
1 222 bbb  2.0  2.0   3.0 
2 333 ccc  3.0  NaN   NaN 
3 111 abc  NaN  3.0   NaN 
4 444 ddd  NaN  1.0   NaN 
5 555 eee  NaN  NaN   4 
+0

ありがとう!私がマージした後、私はID_x Name_x ID_y Name_yを取得しました。それらを避ける方法はありますか? – TylerNG

+0

あなたは= ['ID'、 'Name']で使ったことはありませんか? – Vaishali

+0

はい。私はそれをマージしようとするたびに何度もその問題を抱えています。大きな問題ではありません。 – TylerNG

1

マージ使用する必要があります。以下の完全な例:

Concatは互いに物事を置くでしょう。

import pandas as pd 

data1 = {'ID': {0: 111, 1: 222, 2: 333}, 
'Name': {0: 'aaa', 1: 'bbb', 2: 'ccc'}, 
'XCount': {0: 3, 1: 2, 2: 3}} 

data2 = {'ID': {0: 111, 1: 222, 2: 444}, 
'Name': {0: 'abc', 1: 'bbb', 2: 'ddd'}, 
'YCount': {0: 3, 1: 2, 2: 1}} 

data3 = {'ID': {0: 111, 1: 222, 2: 555}, 
'Name': {0: 'aaa', 1: 'bbb', 2: 'eee'}, 
'ZCount': {0: 2, 1: 3, 2: 4}} 

df = pd.concat(pd.DataFrame(i) for i in (data1,data2,data3)) 

プリント(DF)が返されます:

ID Name XCount YCount ZCount 
0 111 aaa  3.0  NaN  NaN 
1 222 bbb  2.0  NaN  NaN 
2 333 ccc  3.0  NaN  NaN 
0 111 abc  NaN  3.0  NaN 
1 222 bbb  NaN  2.0  NaN 
2 444 ddd  NaN  1.0  NaN 
0 111 aaa  NaN  NaN  2.0 
1 222 bbb  NaN  NaN  3.0 
2 555 eee  NaN  NaN  4.0 

を私たちは今、GROUPBYを実行する場合:

df.groupby(['ID','Name']).sum().reset_index() 

我々が得る:

ID Name XCount YCount ZCount 
0 111 aaa  3.0  NaN  2.0 
1 111 abc  NaN  3.0  NaN 
2 222 bbb  2.0  2.0  3.0 
3 333 ccc  3.0  NaN  NaN 
4 444 ddd  NaN  1.0  NaN 
5 555 eee  NaN  NaN  4.0 
+0

クール!私はもう一つの質問をしたい。 IDに基づいてIDの数と平均を取得できますか? – TylerNG

+0

@TylerNG新しい質問をして、予想される出力を記述する方が良いかもしれません。 –

関連する問題