我有以下数据框 df:
Video 1 1 1 1 1 1 1 1 1 1 ... 36 36 36 36 36 36 36 36 36 36
Confidence Value 3 3 4 4 4 5 5 3 5 3 ... 3 3 3 2 4 2 3 3 3 3
其中行Video
是具有数据框中列名称的行(即带有粗体的行,表示每列的名称)。
我想要的是重新排列这个数据帧,以便输出是这样的:
Video 1 2 3 ... 36
0 3 5 4 ... 3
1 1 2 3 ... 2
2 2 4 4 ... 5
3 4 5 4 ... 3
...
我尝试搜索不同的方法来以我想要的方式附加、连接、合并等列,但我不知道如何,因为每个 Video 有多个实例,即多个1, 2, .. 36
.
因此,对于这些多个实例中的每一个,我想制作其中一列,以视频编号作为列名,行是所有置信度值,如上所示。
那可能吗?
转置枢轴结构可能适合您的需要。
df = pd.read_csv(io.StringIO("""
Video 1 1 1 1 1 2 2 2 2 2 35 35 35 35 35 36 36 36 36 36
Confidence Value 3 3 4 4 4 5 5 3 5 3 3 3 3 2 4 2 3 3 3 3
"""), sep=r"\s{2,}", engine="python", header=None, index_col=0)
print(df)
1 2 3 4 5 6 7 ... 14 15 16 17 18 19 20
0 ...
Video 1 1 1 1 1 2 2 ... 35 35 36 36 36 36 36
Confidence Value 3 3 4 4 4 5 5 ... 2 4 2 3 3 3 3
[2 rows x 20 columns]
这应该适用于每个视频的无限数量的置信度值:
idx = df.transpose().groupby("Video").cumcount().values
ans = df.transpose().set_index(idx).pivot(columns="Video", values="Confidence Value")
注意:如果每个视频的置信度值数量相同(示例中为 5),则groupby-cumcount
可以进一步简化该步骤:
ans = df.transpose().set_index(np.tile(range(5), 4)).pivot(columns="Video", values="Confidence Value")
print(ans)
Video 1 2 35 36
0 3 5 3 2
1 3 5 3 3
2 4 3 3 3
3 4 5 2 3
4 4 3 4 3
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句