使用Pandas转置和重索引DataFrame时遇格式问题求助
解决DataFrame转置后索引与列名异常问题
原始DataFrame
Sample ID 'Deinococcus soli' Cha et al. 2014 16SrX (Apple proliferation group) 16SrXII (Stolbur group) 0 C1day1_barcode01 21 1 0 1 C1day21_barcode19 22 0 0 2 C3day1_barcode03 13 0 0 3 C3day14_barcode15 14 2 2 4 T1day21_barcode22 19 1 1
期望输出
Sample ID C1day1_barcode01 C1day21_barcode19 C3day1_barcode03 C3day14_barcode15 T1day21_barcode22 0 'Deinococcus soli' Cha et al. 2014 21 22 13 14 19 1 16SrX (Apple proliferation group) 1 0 0 2 1 2 16SrXII (Stolbur group) 0 0 0 2 1
解决方案
用「索引设置+转置+列名重定义」的组合操作即可解决,步骤如下:
- 将
Sample ID列设为DataFrame的索引,避免转置后它被当成普通数据行:
df.set_index('Sample ID', inplace=True)
- 执行转置操作,并将转置后的原索引(物种名称)转为普通列:
df_transposed = df.T.reset_index()
- 重新定义列名:把第一个列命名为
Sample ID,后续列名使用原DataFrame的索引值(即各个样本ID):
df_transposed.columns = ['Sample ID'] + df.index.tolist()
- 重置行索引,移除多余的默认索引列:
df_transposed.reset_index(drop=True, inplace=True)
完整代码示例
import pandas as pd # 构造原始DataFrame df = pd.DataFrame({ "Sample ID": ["C1day1_barcode01", "C1day21_barcode19", "C3day1_barcode03", "C3day14_barcode15", "T1day21_barcode22"], "'Deinococcus soli' Cha et al. 2014": [21,22,13,14,19], "16SrX (Apple proliferation group)": [1,0,0,2,1], "16SrXII (Stolbur group)": [0,0,0,2,1] }) # 核心处理流程 df.set_index('Sample ID', inplace=True) df_transposed = df.T.reset_index() df_transposed.columns = ['Sample ID'] + df.index.tolist() df_transposed.reset_index(drop=True, inplace=True) # 输出结果 print(df_transposed)
内容的提问来源于stack exchange,提问作者chan-98
相关产品推荐
相关产品推荐

