我已经生成了数据帧框架并创建了一个csv文件,现在我想制作一个数据帧子集,在其中检查"dst"
列的值(直到0),然后取Image
列的值。
我当前的数据框是:
Image Maxval locx locy dst
0 1.jpg 0.99 22 47 0
1 7.jpg 0.46 27 65 18.68
2 11.jpg 0.32 18 29 18.43
8 18.jpg 0.25 7 38 17.49
10 1.jpg 0.99 40 71 0
11 18.jpg 0.56 27 71 17.68
13 7.jpg 0.42 93 17 19.43
19 11.jpg 0.35 70 39 17.49
图像根据maxval排序,所以我不想更改图像的顺序。我希望我的数据框为:
Image Image
1.jpg 1.jpg
7.jpg 18.jpg
11.jpg 7.jpg
18.jpg 11.jpg
答案 0 :(得分:3)
如果dst
列中的第一个值始终为0
,请比较值0
,然后按cumsum
创建新的列值,然后按GroupBy.cumcount
创建累积和组,上次使用DataFrame.pivot
:
df['c'] = df['dst'].eq(0).cumsum()
df['g'] = df.groupby('c').cumcount()
df1=df.pivot('g','c','Image').add_prefix('Image_').rename_axis(None).rename_axis(None,axis=1)
print (df1)
Image_1 Image_2
0 1.jpg 1.jpg
1 7.jpg 18.jpg
2 11.jpg 7.jpg
3 18.jpg 11.jpg
答案 1 :(得分:0)
这是另一种方法:
dst
列获取图像组groups = df.groupby(df.dst.eq(0).cumsum())['Image']
pd.concat([group.rename('Image_' + str(indx)).reset_index(drop=True) for indx, group in groups], axis=1)
输出:
Image_1 Image_2
0 1.jpg 1.jpg
1 7.jpg 18.jpg
2 11.jpg 7.jpg
3 18.jpg 11.jpg
如您所见,我还通过重命名该系列对concat函数中的列进行了重命名,但是如果您确实想为每个组使用名称“ image”,则不必这样做。