2017-06-29 12 views
1

私は50万行を含むdataframe1を持っています。私は設定を含んでいるdataframe2のモデル番号を見つけることによって設定列を設定したいと思います。groupby関数の出力に基づいて、pandasデータフレームに新しい列を追加するにはどうすればよいですか?

Dataframe1:

Model     Date  Status Configuration 
A4     10/2014 Inop  
A4     11/2014 Op    
A4     11/2014 Op          
G5     10/2014 Inop         
G5     11/2014 Inop         
G5     11/2014 Op          
G8     10/2014 Op          
G8     11/2014 Op          
G8     11/2014 Op          
G8     10/2014 Inop         
Z2     11/2014 Op          
Z2     11/2014 Op          

Dataframe2:

Model    Configuration 
A4     ICS 
G5     PCS 
G8     ICS  
Z2     1/2 ICS 

コード私は、現在実行しています:

for Model, group in dataframe1.groupby('Model'): 
    #gets configuration from dataframe2 
    config = get_configuration(Model) 
    #attempt to assign configuration to all columns with that model number in dataframe1 
    dataframe1['Config'] = con 

このコードを返す:

このコードグループのモデルによってdataframe1そして成功した各グループの設定を取得しますが、私は以下の結果をdataframe1に新しい行にその設定を適用することはできません。

Model     Date  Status Configuration 
A4     10/2014 Inop  ICS 
A4     11/2014 Op  ICS  
A4     11/2014 Op  ICS  
G5     10/2014 Inop  PCS 
G5     11/2014 Inop  PCS 
G5     11/2014 Op  PCS 
G8     10/2014 Op  ICS 
G8     11/2014 Op  ICS  
G8     11/2014 Op  ICS  
G8     10/2014 Inop  ICS  
Z2     11/2014 Op  1/2 ICS 
Z2     11/2014 Op  1/2 ICS 
+0

を試してみてくださいリンクhttps://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html – Wen

答えて

3

使用map

Dataframe1['Config'] = Dataframe1['Model'].map(Dataframe2.set_index('Model').Config) 
Dataframe1 

    Model  Date Status Config 
0  A4 10/2014 Inop  ICS 
1  A4 11/2014  Op  ICS 
2  A4 11/2014  Op  ICS 
3  G5 10/2014 Inop Non ICS 
4  G5 11/2014 Inop Non ICS 
5  G5 11/2014  Op Non ICS 
6  G8 10/2014  Op  ICS 
7  G8 11/2014  Op  ICS 
8  G8 11/2014  Op  ICS 
9  G8 10/2014 Inop  ICS 
10 Z2 11/2014  Op 1/2 ICS 
11 Z2 11/2014  Op 1/2 ICS 
1

はこれを試してみてくださいpd.merge

Dataframe1.merge(Dataframe2,left_on='Model',right_on='Model',how='left')   
+0

これも良い解決策です: - )...あなたは 'リグを必要としません列名が同じであれば「ht_on」または「left_on」となります。あなたは単に 'on'を使用することができます – piRSquared

+0

@piRSquaredベース効率、あなたはより良いです〜 – Wen

関連する問題