如果重复,则将行移动到新列

时间:2016-01-14 13:35:53

标签: python pandas dataframe

What I'm trying to do

Sample_ID | fungi | fungi_ID | evalue | ITS_region
   A1       red      1112       0.7         1
   A1       red      1112       0.4         2
   B1       green    1234       0.03        1
   B1       blue     9090       0.02        2

到此:

Sample_ID | fungi | fungi_ID | evalue | ITS_region | dup_ITS | dup_fungi | dup_fungi_ID
   A1       red      1112       0.7         1              2       red           1112      
   B1       green    1234       0.03        1              2       blue          9090

我已将NCBI爆炸中的数据解析为熊猫数据帧。但是,所有数据都有重复的ID(参见附件),我需要来自同一行的两个IDS的信息。

我想要实现的是将行数据从重复项移动到与原始行相同的行中的新列。

df包含以下标题(请参阅附件):sample_idfungifungi_idevalueITS region

1 个答案:

答案 0 :(得分:0)

如果每个Sample_ID只有两行,请按Sample_IDjoin使用groupby,并按last获取最后一个值。然后,drop删除重复的新列,并通过reset_index重置索引:

print df

#  Sample_ID  fungi  fungi_ID  evalue  ITS_region
#0        A1    red      1112    0.70           1
#1        A1    red      1112    0.40           2
#2        B1  green      1234    0.03           1
#3        B1   blue      9090    0.02           2

print df.join(df.groupby('Sample_ID').last(), on='Sample_ID', rsuffix='_dup')
        .drop_duplicates(subset=['fungi_dup','fungi_ID_dup','ITS_region_dup','evalue_dup'])
        .reset_index(drop=True)

#  Sample_ID  fungi  fungi_ID  evalue  ITS_region fungi_dup  fungi_ID_dup  \
#0        A1    red      1112    0.70           1       red          1112   
#1        B1  green      1234    0.03           1      blue          9090   
#
#   evalue_dup  ITS_region_dup  
#0        0.40               2  
#1        0.02               2