我有一个数据框,其中包含通过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]
。
我认为我可能真的很简单,但是有任何建议将不胜感激。
答案 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