簡體   English   中英

從 pandas dataframe 中隨機選擇 n 行並將它們移動到新的 df 而不重復

[英]Randomly selecting n rows from pandas dataframe and moving them to new df without repetition

我有一個 140 名學生的 dataframe,我需要將每個學生隨機分配給 5 個 TA(評分者)中的一個。

一個例子是

graders = ['K', 'M', ]

df = pd.DataFrame({
    'First name': ['John', 'Paul', 'George','Ringo'], 
    'Last name':['Lennon', 'McCartney', 'Harrison', 'Star'], 
    })

df['Grader'] = ''

我如何將評分者“K”隨機分配給 3 名學生,然后將 rest 分配給“M”,以確保學生不能同時進入兩組。

我已經在這里閱讀了許多答案,但沒有人為我澄清,任何幫助將不勝感激。

您可以分配一個隨機數 1-5,然后將 map 這些數字分配給 TA。 但是,這並不能保證每個 TA 獲得總數的 1/5。

import pandas as pd
import numpy as np

df['id'] = np.random.randint(1,6, df.shape[0]) # make a new column of random ints 1-5
df['Grader'] = df['id'].map({1:'a',2:'b',3:'c',4:'d',5:'e'}) # turns 1 to 'a', 2 to 'b', etc. Change this to your actual TAs.

使用df.sample

In [1291]: df['Grader'] = 'M' # Assign `M` to all the students at first

In [1299]: df.loc[df.sample(n=3).index, 'Grader'] = 'K' # Randomly choose 3 students and change their Grader to 'K'

In [1300]: df
Out[1300]: 
  First name  Last name Grader
0       John     Lennon      K
1       Paul  McCartney      M
2     George   Harrison      K
3      Ringo       Star      K

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM