按特定列值随机排列数据框中的行
Shuffle rows in dataframe by specific colum value
我有一个数据框如下:
Video Frames Feature1 Feature2 Label
0 0 frame0.jpg feature1 feature2 0
1 0 frame1.jpg feature1 feature2 0
2 0 frame2.jpg feature1 feature2 0
3 0 frame3.jpg feature1 feature2 0
4 1 frame0.jpg feature1 feature2 1
5 1 frame1.jpg feature1 feature2 1
6 1 frame2.jpg feature1 feature2 1
7 1 frame3.jpg feature1 feature2 1
8 2 frame0.jpg feature1 feature2 0
9 2 frame1.jpg feature1 feature2 0
10 2 frame2.jpg feature1 feature2 0
11 2 frame3.jpg feature1 feature2 0
我想创建帧槽(例如 2 个连续帧)并打乱行,但始终确保保留属于同一视频的两个连续帧行。对于上述情况和 2 个连续帧的时隙,结果将是:
Video Frames Feature1 Feature2 Label
0 0 frame0.jpg feature1 feature2 0
1 0 frame1.jpg feature1 feature2 0
2 1 frame2.jpg feature1 feature2 1
3 1 frame3.jpg feature1 feature2 1
4 2 frame2.jpg feature1 feature2 0
5 2 frame3.jpg feature1 feature2 0
6 2 frame0.jpg feature1 feature2 0
7 2 frame1.jpg feature1 feature2 0
8 0 frame2.jpg feature1 feature2 0
9 0 frame3.jpg feature1 feature2 0
10 1 frame0.jpg feature1 feature2 1
11 1 frame1.jpg feature1 feature2 1
我希望插槽中的帧数是可配置的,我的意思是,对于上述情况,我 selected 2 但可能是 3 或 10 个连续帧。帧 selected 的 window 没有滑动,我的意思是,我 select [frame0, frame1] 并且在下一步中 [frame2, frame3] 但从来没有 [frame1,frame2] .
我一直在考虑最好的方法,但不清楚如何做。
提前致谢
IIUC,你可以 select 偶数索引洗牌,并使用 numpy 添加奇数索引:
import numpy as np
order = np.arange(0,len(df), 2)
np.random.shuffle(order)
order = np.vstack([order, order+1]).ravel('F')
df2 = df.iloc[order]
示例输出:
Video Frames Feature1 Feature2 Label
2 0 frame2.jpg feature1 feature2 0
3 0 frame3.jpg feature1 feature2 0
0 0 frame0.jpg feature1 feature2 0
1 0 frame1.jpg feature1 feature2 0
6 1 frame2.jpg feature1 feature2 1
7 1 frame3.jpg feature1 feature2 1
8 2 frame0.jpg feature1 feature2 0
9 2 frame1.jpg feature1 feature2 0
10 2 frame2.jpg feature1 feature2 0
11 2 frame3.jpg feature1 feature2 0
4 1 frame0.jpg feature1 feature2 1
5 1 frame1.jpg feature1 feature2 1
我有一个数据框如下:
Video Frames Feature1 Feature2 Label
0 0 frame0.jpg feature1 feature2 0
1 0 frame1.jpg feature1 feature2 0
2 0 frame2.jpg feature1 feature2 0
3 0 frame3.jpg feature1 feature2 0
4 1 frame0.jpg feature1 feature2 1
5 1 frame1.jpg feature1 feature2 1
6 1 frame2.jpg feature1 feature2 1
7 1 frame3.jpg feature1 feature2 1
8 2 frame0.jpg feature1 feature2 0
9 2 frame1.jpg feature1 feature2 0
10 2 frame2.jpg feature1 feature2 0
11 2 frame3.jpg feature1 feature2 0
我想创建帧槽(例如 2 个连续帧)并打乱行,但始终确保保留属于同一视频的两个连续帧行。对于上述情况和 2 个连续帧的时隙,结果将是:
Video Frames Feature1 Feature2 Label
0 0 frame0.jpg feature1 feature2 0
1 0 frame1.jpg feature1 feature2 0
2 1 frame2.jpg feature1 feature2 1
3 1 frame3.jpg feature1 feature2 1
4 2 frame2.jpg feature1 feature2 0
5 2 frame3.jpg feature1 feature2 0
6 2 frame0.jpg feature1 feature2 0
7 2 frame1.jpg feature1 feature2 0
8 0 frame2.jpg feature1 feature2 0
9 0 frame3.jpg feature1 feature2 0
10 1 frame0.jpg feature1 feature2 1
11 1 frame1.jpg feature1 feature2 1
我希望插槽中的帧数是可配置的,我的意思是,对于上述情况,我 selected 2 但可能是 3 或 10 个连续帧。帧 selected 的 window 没有滑动,我的意思是,我 select [frame0, frame1] 并且在下一步中 [frame2, frame3] 但从来没有 [frame1,frame2] .
我一直在考虑最好的方法,但不清楚如何做。
提前致谢
IIUC,你可以 select 偶数索引洗牌,并使用 numpy 添加奇数索引:
import numpy as np
order = np.arange(0,len(df), 2)
np.random.shuffle(order)
order = np.vstack([order, order+1]).ravel('F')
df2 = df.iloc[order]
示例输出:
Video Frames Feature1 Feature2 Label
2 0 frame2.jpg feature1 feature2 0
3 0 frame3.jpg feature1 feature2 0
0 0 frame0.jpg feature1 feature2 0
1 0 frame1.jpg feature1 feature2 0
6 1 frame2.jpg feature1 feature2 1
7 1 frame3.jpg feature1 feature2 1
8 2 frame0.jpg feature1 feature2 0
9 2 frame1.jpg feature1 feature2 0
10 2 frame2.jpg feature1 feature2 0
11 2 frame3.jpg feature1 feature2 0
4 1 frame0.jpg feature1 feature2 1
5 1 frame1.jpg feature1 feature2 1