首页 > 解决方案 > 如何使用熊猫在同一行索引下拥有多行

问题描述

我正在编写一个脚本来标准化来自 RT-PCR 的数据。我正在从 tsv 文件中读取数据,并且正在努力将其放入 pandas 数据框中,以便它可以使用。这里的问题是行索引具有相同的名称,是否可以使其成为层次结构?

我正在使用 Python 3.6。我试过 .groupby() 和 .pivot() 但我似乎无法让它做我想做的事。

def calculate_peaks(file_path):
    peaks_tsv = pd.read_csv(file_path, sep='\t', header=0, index_col=0)

我的输入文件是这样的: 输入文件图像

我的预期输出:

                EMB.brep1.peak  EMB.brep1.length  EMB.brep2.peak  EMB.brep2.length  EMB.brep3.peak  EMB.brep3.length
primer name
Hv161        0        19276            218.41           20947            218.39           21803            218.26
             1        22906            221.35           26317            221.17           26787            221.21
Hv223        0         4100            305.24            5247            305.37            4885            305.25
             1         2593            435.25            3035            435.30            2819            435.32
             2         4864            597.40            5286            597.20            4965            596.60

实际输出:

             EMB.brep1.peak  EMB.brep1.length  EMB.brep2.peak  EMB.brep2.length  EMB.brep3.peak  EMB.brep3.length
primer name
Hv161                 19276            218.41           20947            218.39           21803            218.26
Hv161                 22906            221.35           26317            221.17           26787            221.21
Hv223                  4100            305.24            5247            305.37            4885            305.25
Hv223                  2593            435.25            3035            435.30            2819            435.32
Hv223                  4864            597.40            5286            597.20            4965            596.60

标签: pythonpandas

解决方案


你可以这样做:

peaks_tsv = pd.read_csv(file_path, sep='\t', header=0)

peaks_tsv['idx'] = peaks_tsv.groupby('primer name').cumcount()

peaks_tsv.set_index(['primer name', 'idx'], inplace=True)

推荐阅读