如何根据groupby函数输出向pandas数据帧添加新列?

时间:2017-06-29 18:40:20

标签: python pandas dataframe jupyter

我有一个包含500,000行的dataframe1。我想通过在dataframe2中找到包含配置的Model号来填充配置列。

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

尝试pd.merge

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