3 回答

TA貢獻1831條經驗 獲得超9個贊
這是你需要的嗎 np.random.choice
d={x : y for x, y in df.groupby(np.arange(len(df))//4)}
yourdf=pd.concat([d.get(x) for x in np.random.choice(len(d),2,replace=False)])
yourdf
Out[986]:
col1 col2
4 5 e
5 6 f
6 7 g
7 8 h
0 1 a
1 2 b
2 3 c
3 4 d

TA貢獻1804條經驗 獲得超7個贊
您可以通過以下方式按 4 組重新洗牌... 將索引分組為 4 組,然后對其進行洗牌。
例子:
df = pd.DataFrame(np.random.randint(10, size=(12, 2)))
a b
0 5 4
1 7 7
2 7 8
3 8 4
4 9 4
5 9 0
6 1 5
7 4 1
8 0 1
9 5 6
10 1 3
11 9 2
new_index = np.array(df.index).reshape(-1, 4)
np.random.shuffle(new_index) # shuffles array in-place
df = df.loc[new_index.reshape(-1)]
a b
8 0 1
9 5 6
10 1 3
11 9 2
4 9 4
5 9 0
6 1 5
7 4 1
0 5 4
1 7 7
2 7 8
3 8 4

TA貢獻1859條經驗 獲得超6個贊
如您所說,您有4個序列的數據,那么數據幀的長度應該是4的倍數。如果您的數據是3個序列,請在代碼中將4更改為3。
>>> import pandas as pd
>>> import numpy as np
創(chuàng)建表:
>>> df = pd.DataFrame({'col1':[1,2,3,4,5,6,7,8],'col2':['a','b','c','d','e','f','g','h']})
>>> df
col1 col2
0 1 a
1 2 b
2 3 c
3 4 d
4 5 e
5 6 f
6 7 g
7 8 h
>>> df.shape[0]
8
創(chuàng)建洗牌列表:
>>> np_range = np.arange(0,df.shape[0])
>>> np_range
array([0, 1, 2, 3, 4, 5, 6, 7])
重塑和洗牌:
>>> np_range1 = np.reshape(np_range,(df.shape[0]/4,4))
>>> np_range1
array([[0, 1, 2, 3],
[4, 5, 6, 7]])
>>> np.random.shuffle(np_range1)
>>> np_range1
array([[4, 5, 6, 7],
[0, 1, 2, 3]])
>>> np_range2 = np.reshape(np_range1,(df.shape[0],))
>>> np_range2
array([4, 5, 6, 7, 0, 1, 2, 3])
選擇數據:
>>> new_df = df.loc[np_range2]
>>> new_df
col1 col2
4 5 e
5 6 f
6 7 g
7 8 h
0 1 a
1 2 b
2 3 c
3 4 d
我希望這有幫助!謝謝!
添加回答
舉報