基于子串信息重排Pandas DataFrame的解决方案咨询
实现代码
首先导入依赖库:
import pandas as pd import numpy as np
以下是完整处理逻辑:
# 构造原始数据,若列名实际为Type1_3_A/Type2_3_B可直接替换第一、二个key即可,拆分逻辑通用 df = pd.DataFrame({ 'Type1_100_A': {0: 34.0, 1: 4573.0, 2: 16.0, 3: np.nan, 4: np.nan}, 'Type2_200_B': {0: np.nan, 1: np.nan, 2: np.nan, 3: 17.0, 4: 25.0}, 'Seq': { 0: '2_CTGT', 1: '7_GATG', 2: '4_ACTT', 3: '5_GTCA', 4: '1_TCGA' } }) # 宽表转长表,过滤掉数值为空的无效行 df_melt = df.melt(id_vars='Seq', var_name='col_info', value_name='Number').dropna(subset='Number') # 拆分原列名字段,生成Type、Label、Replicate三列 df_melt[['Type', 'Label', 'Replicate']] = df_melt['col_info'].str.split('_', expand=True) # 拆分Seq字段,生成Count和序列内容两列 df_melt[['Count', 'Seq']] = df_melt['Seq'].str.split('_', expand=True) # 转换Count列为整型,按目标顺序调整列后重置索引 df_melt['Count'] = df_melt['Count'].astype(int) result = df_melt[['Type', 'Label', 'Replicate', 'Count', 'Seq', 'Number']].reset_index(drop=True)
执行后result就是你需要的目标结构。如果原始列名的Label字段需要替换为指定值,可在处理过程中加一行替换逻辑即可,示例:
# 示例:将Label列的3替换为对应值,适配你原始构建代码的列名情况 df_melt['Label'] = df_melt['Label'].replace({'3':'100', '3':'200'})
内容的提问来源于stack exchange,提问作者The Nightman
相关产品推荐
相关产品推荐

