Python - 在pandas数据框中为两行应用concat函数

时间:2016-06-18 22:24:56

标签: python pandas dataframe

我有一个大的数据框,基本上是一个图像ID和一组生物特征。我必须组合所有ID(GID),结果特征应该是具有相同ID的所有行的串联。

我确实理解该解决方案需要使用group_by函数并应用我需要连接的行。在这种情况下,我不确定写入的函数参数。

示例数据。

df[['GID','AID','INDIVIDUAL_NAME','NID']].head(10)
        GID    AID INDIVIDUAL_NAME    NID 
    0   546  16167            ____ -16167 
    1   546  16168            ____ -16168 
    2   546  16169            ____ -16169 
    3   546  16170            ____ -16170 
    4  5666  13822   IBEIS_PZ_1866   2139 
    5  5713   9269   NNP_GIRM_0149    253 
    6  8838  11554   IBEIS_PZ_0373    646 
    7  1062   9439   NNP_GIRM_0143    234 
    8  1062   9440            ____  -9440 
    9  7748   9253            ____  -9253 

我需要将结果输出为

    GID    AID                       INDIVIDUAL_NAME         NID
0   546  16167,16168 ,16169,16170    ____, ____, ____, ____  -16167,-16168 ,-16169,-16170 
1  5666  13822                       IBEIS_PZ_1866           2139
2  5713   9269                       NNP_GIRM_0149           253                     frontleft
3  8838  11554                       IBEIS_PZ_0373           646  
4  1062   9439,9440                  NNP_GIRM_0143, ____     234,-9440 
5  7748   9253                       ____                   -9253 

另外,我正在寻找一个很好的教程,他们已经解释了pandas数据框的应用函数。

1 个答案:

答案 0 :(得分:2)

您可以先按string列和groupby功能GID投射到join然后aggregate

df['AID'] = df.AID.astype(str)
df['NID'] = df.NID.astype(str)

print (df.groupby('GID').agg(','.join).reset_index())
    GID                      AID      INDIVIDUAL_NAME  \
0   546  16167,16168,16169,16170  ____,____,____,____   
1  1062                9439,9440   NNP_GIRM_0143,____   
2  5666                    13822        IBEIS_PZ_1866   
3  5713                     9269        NNP_GIRM_0149   
4  7748                     9253                 ____   
5  8838                    11554        IBEIS_PZ_0373   

                           NID  
0  -16167,-16168,-16169,-16170  
1                    234,-9440  
2                         2139  
3                          253  
4                        -9253  
5                          646  

Groupby aggregation in docs

编辑:

或者,您可以将astypejoin

一起使用
print (df.groupby('GID').agg(lambda x: ','.join(x.astype(str))).reset_index())
    GID                      AID      INDIVIDUAL_NAME  \
0   546  16167,16168,16169,16170  ____,____,____,____   
1  1062                9439,9440   NNP_GIRM_0143,____   
2  5666                    13822        IBEIS_PZ_1866   
3  5713                     9269        NNP_GIRM_0149   
4  7748                     9253                 ____   
5  8838                    11554        IBEIS_PZ_0373   

                           NID  
0  -16167,-16168,-16169,-16170  
1                    234,-9440  
2                         2139  
3                          253  
4                        -9253  
5                          646