2016-06-18 9 views
1

私はフォーマットpandas pythonを使ってデータフレームをマージするには?

形式を次のようなデータフレームをマージする方法を
company,value,comp_id 
a,76,a1 
b,56,b1 
c,78 
d,56 

を、次のような出力が必要な2つのデータフレーム

DATA1

company,values 
a,76 
b,56 
c,78 
d,56 

dataframe2

company,comp_id 
a,a1 
b,b1 

を以下のがありますか?

+1

'データフレームの本体にデータフレームのインデックス、または列をcompany'ていますか? –

+0

フレームの列 –

+0

ああ、あらかじめ知っておいた方がいいでしょう。その場合、会社がユニークであれば、再インデックスすることは賢明でしょう。 – sobek

答えて

2

あなたはこのためにpd.concat()を使用することができます。

私は理解を深めるために例を追加しています。

今(pd.concatを使用して、これら2つのデータフレームをマージ
In [25]: grouped_data 
Out[25]: 
            Yield 
monthyear Facility Date     
Dec 15 CCM2  2015-12-01 2550.000000 
Feb 16 CCM2  2016-02-01 4250.000000 
Jan 16 CCM1  2016-01-01 1540.000000 
      CCM2  2016-01-01 6800.000000 
Nov 15 CCM1  2015-11-01 921.458157 
      CCM2  2015-11-01 1750.310038 
Sep 15 CCM2  2015-09-01 5191.197065 


In [27]: grouped_data1 
Out[27]: 
           Planned 
monthyear Facility Date    
Nov 15 CCM1  2015-11-01 880.0 
      CCM2  2015-11-01 3000.0 
Sep 15 CCM2  2015-09-01 8000.0 

In [28]: result = pd.concat([grouped_data,grouped_data1],axis=1) 

In [29]: result 
Out[29]: 
            Yield Planned 
monthyear Facility Date        
Dec 15 CCM2  2015-12-01 2550.000000  NaN 
Feb 16 CCM2  2016-02-01 4250.000000  NaN 
Jan 16 CCM1  2016-01-01 1540.000000  NaN 
      CCM2  2016-01-01 6800.000000  NaN 
Nov 15 CCM1  2015-11-01 921.458157 880.0 
      CCM2  2015-11-01 1750.310038 3000.0 
Sep 15 CCM2  2015-09-01 5191.197065 8000.0 
1

あなたはpandas.concat()関数を探しています。ドキュメントhereを見てください。 fillna

4

使用merge

#fillna only column comp_id 
print (pd.merge(df1,df2,on='company', how='outer').fillna({'comp_id':''})) 

#fillna all dataframe 
#print (pd.merge(df1,df2,on='company', how='outer').fillna('')) 

    company values comp_id 
0  a  76  a1 
1  b  56  b1 
2  c  78   
3  d  56 

サンプル:

df1 = pd.DataFrame({'values': {0: 76, 1: 56, 2: 78, 3: 56}, 
        'company': {0: 'a', 1: 'b', 2: 'c', 3: 'd'}}) 
print (df1) 
    company values 
0  a  76 
1  b  56 
2  c  78 
3  d  56 

df2 = pd.DataFrame({'comp_id': {0: 'a1', 1: 'b1'}, 'company': {0: 'a', 1: 'b'}}, 
        columns=['company','comp_id']) 
print (df2) 
    company comp_id 
0  a  a1 
1  b  b1 

print (pd.merge(df1,df2,on='company', how='outer')) 
    company values comp_id 
0  a  76  a1 
1  b  56  b1 
2  c  78  NaN 
3  d  56  NaN 

#fillna only column comp_id 
print (pd.merge(df1,df2,on='company', how='outer').fillna({'comp_id':''})) 
    company values comp_id 
0  a  76  a1 
1  b  56  b1 
2  c  78   
3  d  56 
+0

あなたは速すぎます。 – gobrewers14

+0

はい..... Jezraelは非常に高速です –

+0

喜んでお手伝いします。 – jezrael

3

使用pd.merge()

>>> pd.merge(dataframe1, dataframe2, on='company', how='outer') 
関連する問題