第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在保持內部順序的同時打亂 DataFrame

在保持內部順序的同時打亂 DataFrame

炎炎設計 2021-11-30 18:37:54
我有一個包含預處理數據的數據框,這樣每 4 行是一個序列(稍后將被重塑并用于 lstm 訓練)。我想打亂數據框,但我想保持每個行序列不變。例如: a = [1,2,3,4,10,11,12,13,20,21,22,23]將變成類似:a = [20,21,22,23,1,2,3,4,10,11,12,13]。df.sample(frac=1) 是不夠的,因為它會破壞序列。Solution , thanks to @Wen-Ben:seq_length = 4 length_array = np.arange((df.shape[0]//seq_length)*seq_length)trunc_data = df.head((df.shape[0]//seq_length)*seq_length)d = {x : y for x, y in trunc_data.groupby(length_array//seq_length)}yourdf = pd.concat([d.get(x) for x in np.random.choice(len(d),len(d.keys()),replace=False)])
查看完整描述

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


查看完整回答
反對 回復 2021-11-30
?
三國紛爭

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


查看完整回答
反對 回復 2021-11-30
?
BIG陽

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


我希望這有幫助!謝謝!


查看完整回答
反對 回復 2021-11-30
  • 3 回答
  • 0 關注
  • 336 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號