根据索引列折叠熊猫数据框行

时间:2018-07-11 22:31:53

标签: pandas dataframe melt

我有一个数据框,其中包含通过ID列链接的信息。这些行是连续的,奇数行包含一个“起点”,偶数行包含一个“终点”。我的目标是将其中的数据折叠成一行,并在其后分别包含“开始”和“结束”列。这些行确实具有“数据包ID”,如果数据帧的顺序性质不一致,这些数据包将链接它们。

示例:

    df:
        0   1           2           3       4   5
    0   hs6 106956570   106956648   ID_A1   60  -
    1   hs1 153649721   153649769   ID_A1   60  -
    2   hs1 865130744   865130819   ID_A2   0   -
    3   hs7 21882206    21882237    ID_A2   0   -
    4   hs1 74230744    74230819    ID_A3   0   +
    5   hs8 92041314    92041508    ID_A3   0   + 

我想要实现的结果数据框是:

    new_df
        0   1           2           3   4           5
    0   hs6 106956570   106956648   hs1 153649721   153649769
    1   hs1 865130744   865130819   hs7 21882206    21882237
    2   hs1 74230744    74230819    hs8 92041314    92041508

每行都包含有关起点和终点的信息。

我试图将ID传递到数组中,并使用for循环将信息从原始数据帧中拉出到新的数据帧中,但这没有用。我正在查看melt documentation,它暗示pd.melt(df, id_vars=[3], value_vars=[0,1,2])可以工作,但是我看不到如何将相应的行放入位置new_df[3,4,5]

我认为我可能真的很简单,但是有任何建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

df_out = df.set_index([df.index%2, df.index//2])[df.columns[:3]]\
           .unstack(0).sort_index(level=1, axis=1)
df_out.columns = np.arange(len(df_out.columns))
df_out

输出:

     0          1          2    3          4          5
0  hs6  106956570  106956648  hs1  153649721  153649769
1  hs1  865130744  865130819  hs7   21882206   21882237
2  hs1   74230744   74230819  hs8   92041314   92041508