熊猫-2列串联的groupby

我在下面有一个数据框,其中seq_name是视频pedestrian_id的名称该视频中行人的名字,也是frame_no包含视频中所述行人的帧。因此,对于下面的例子中,我有2个视频00010002和3名总行人。

我正在尝试global_id根据这些信息对他们进行分组,以便为​​他们分配一个,以便为每个唯一的行人分配一个ID,从1到行人总数。

       seq_name     label pedestrian_id  frame_no  global_id
0          0001  crossing          0001  0001.png         -1
1          0001  crossing          0001  0002.png         -1
2          0001  crossing          0001  0003.png         -1
3          0001  crossing          0001  0004.png         -1
4          0001  crossing          0001  0005.png         -1
5          0001  crossing          0001  0006.png         -1
6          0001  crossing          0001  0007.png         -1
7          0001  crossing          0001  0008.png         -1
8          0001  crossing          0001  0009.png         -1
9          0001  crossing          0001  0010.png         -1
10         0001  crossing          0002  0001.png         -1
11         0001  crossing          0002  0002.png         -1
12         0001  crossing          0002  0003.png         -1
13         0001  crossing          0002  0004.png         -1
14         0001  crossing          0002  0005.png         -1
15         0001  crossing          0002  0006.png         -1
16         0001  crossing          0002  0007.png         -1
17         0001  crossing          0002  0008.png         -1
18         0001  crossing          0002  0009.png         -1
19         0001  crossing          0002  0010.png         -1
20         0002  crossing          0001  0001.png         -1
21         0002  crossing          0001  0002.png         -1
22         0002  crossing          0001  0003.png         -1
23         0002  crossing          0001  0004.png         -1
24         0002  crossing          0001  0005.png         -1
25         0002  crossing          0001  0006.png         -1
26         0002  crossing          0001  0007.png         -1
27         0002  crossing          0001  0008.png         -1
28         0002  crossing          0001  0009.png         -1
29         0002  crossing          0001  0010.png         -1

因此,最终数据帧应如下所示

       seq_name     label pedestrian_id  frame_no  global_id
0          0001  crossing          0001  0001.png         1
1          0001  crossing          0001  0002.png         1
2          0001  crossing          0001  0003.png         1
3          0001  crossing          0001  0004.png         1
4          0001  crossing          0001  0005.png         1
5          0001  crossing          0001  0006.png         1
6          0001  crossing          0001  0007.png         1
7          0001  crossing          0001  0008.png         1
8          0001  crossing          0001  0009.png         1
9          0001  crossing          0001  0010.png         1
10         0001  crossing          0002  0001.png         2
11         0001  crossing          0002  0002.png         2
12         0001  crossing          0002  0003.png         2
13         0001  crossing          0002  0004.png         2
14         0001  crossing          0002  0005.png         2
15         0001  crossing          0002  0006.png         2
16         0001  crossing          0002  0007.png         2
17         0001  crossing          0002  0008.png         2
18         0001  crossing          0002  0009.png         2
19         0001  crossing          0002  0010.png         2
20         0002  crossing          0001  0001.png         3
21         0002  crossing          0001  0002.png         3
22         0002  crossing          0001  0003.png         3
23         0002  crossing          0001  0004.png         3
24         0002  crossing          0001  0005.png         3
25         0002  crossing          0001  0006.png         3
26         0002  crossing          0001  0007.png         3
27         0002  crossing          0001  0008.png         3
28         0002  crossing          0001  0009.png         3
29         0002  crossing          0001  0010.png         3

看起来很简单,但我是熊猫的新手,遇到了很多麻烦。我做的唯一的事情就是将它们分组依据seq_name,并pedestrian_id追加新列前。但是,当我打印数据时,它不再类似于上面的ID,而且看起来global_id已附加到新行而不是新列。想要一些帮助。

df = df.groupby(['seq_name','pedestrian_id']).agg(lambda x: x.tolist())
df["global_id"] = range(1, len(df)+1)
耶斯列尔

用途GroupBy.ngroup

df["global_id"] = df.groupby(['seq_name','pedestrian_id']).ngroup() + 1

另一个解决方案factorize

s = df['seq_name'].astype(str) +'_' +df['pedestrian_id'].astype(str)
s = list(map(tuple, df[['seq_name','pedestrian_id']].values.tolist()))
df["global_id"] = pd.factorize(s)[0] + 1

print (df)
    seq_name     label  pedestrian_id  frame_no  global_id
0          1  crossing              1  0001.png          1
1          1  crossing              1  0002.png          1
2          1  crossing              1  0003.png          1
3          1  crossing              1  0004.png          1
4          1  crossing              1  0005.png          1
5          1  crossing              1  0006.png          1
6          1  crossing              1  0007.png          1
7          1  crossing              1  0008.png          1
8          1  crossing              1  0009.png          1
9          1  crossing              1  0010.png          1
10         1  crossing              2  0001.png          2
11         1  crossing              2  0002.png          2
12         1  crossing              2  0003.png          2
13         1  crossing              2  0004.png          2
14         1  crossing              2  0005.png          2
15         1  crossing              2  0006.png          2
16         1  crossing              2  0007.png          2
17         1  crossing              2  0008.png          2
18         1  crossing              2  0009.png          2
19         1  crossing              2  0010.png          2
20         2  crossing              1  0001.png          3
21         2  crossing              1  0002.png          3
22         2  crossing              1  0003.png          3
23         2  crossing              1  0004.png          3
24         2  crossing              1  0005.png          3
25         2  crossing              1  0006.png          3
26         2  crossing              1  0007.png          3
27         2  crossing              1  0008.png          3
28         2  crossing              1  0009.png          3
29         2  crossing              1  0010.png          3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章