如何用Pandas按Cluster分组,将代表序列前置并合并同组其他序列?
解决方法
第一步:修正Cluster列类型(可选但推荐)
读取TSV后,先确认Cluster列的类型,若为字符串可转为整数,避免分组时的潜在问题:
df['Cluster'] = df['Cluster'].astype(int)
第二步:分组处理生成目标格式
以下提供两种实现方式,任选其一即可:
方式一:使用groupby+自定义函数
def process_cluster(group): # 获取当前组的代表序列 rep_seq = group[group['Representative'] == 'TRUE']['Sequence'].iloc[0] # 合并当前组的非代表序列(空格分隔) non_rep_seqs = ' '.join(group[group['Representative'] == 'FALSE']['Sequence']) return pd.Series({'Representative': rep_seq, 'Sequence': non_rep_seqs}) # 分组处理并重置索引 result_df = df.groupby('Cluster').apply(process_cluster).reset_index()
方式二:拆分合并法(更直观)
先分别提取代表序列和非代表序列,再合并结果:
# 提取代表序列,重命名列 rep_df = df[df['Representative'] == 'TRUE'][['Cluster', 'Sequence']].rename(columns={'Sequence': 'Representative'}) # 分组合并非代表序列 non_rep_df = df[df['Representative'] == 'FALSE'].groupby('Cluster')['Sequence'].agg(' '.join).reset_index() # 合并两个结果表 result_df = pd.merge(rep_df, non_rep_df, on='Cluster', how='left')
结果说明
处理后的result_df会以Cluster为分组,每行对应一个Cluster:
Representative列存储该组的代表序列Sequence列存储该组所有非代表序列,以空格分隔
内容的提问来源于stack exchange,提问作者Yago Dias
相关产品推荐
相关产品推荐

