根据索引列折叠 pandas 数据框行
collapse pandas dataframe rows based on index column
我有一个数据框,其中包含由 ID 列 link 编辑的信息。这些行是连续的,奇数行包含 "start-point",偶数行包含 "end" 点。我的目标是将这些数据折叠成一行,其中 "start" 和 "end" 的列彼此相邻。如果数据帧的顺序性质不一致,这些行确实有一个 "packet ID" link 它们。
示例:
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]
。
我认为这可能是我遗漏的一些非常简单的东西,但我们将不胜感激。
你可以试试这个:
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
我有一个数据框,其中包含由 ID 列 link 编辑的信息。这些行是连续的,奇数行包含 "start-point",偶数行包含 "end" 点。我的目标是将这些数据折叠成一行,其中 "start" 和 "end" 的列彼此相邻。如果数据帧的顺序性质不一致,这些行确实有一个 "packet ID" link 它们。
示例:
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]
。
我认为这可能是我遗漏的一些非常简单的东西,但我们将不胜感激。
你可以试试这个:
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