根据列值python制作dtaframe的子集

时间:2019-08-20 06:10:16

标签: python-3.x pandas dataframe

我已经生成了数据帧框架并创建了一个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 

2 个答案:

答案 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)

这是另一种方法:

  1. 根据dst列获取图像组
groups = df.groupby(df.dst.eq(0).cumsum())['Image']
  1. 重置每个组的索引后,对每个组进行连接:
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”,则不必这样做。