我想在对DataFrame进行矢量操作期间选择一个随机行。这就是我的inpDF
的样子:
string1 string2
0 abc dfe
1 ghi jkl
2 mno pqr
3 stu vwx
我正在尝试在此处找到函数getRandomRow()
:
outDF['string1'] = inpDF['string1']
outDF['string2'] = inpDF.getRandomRow()['string2']
这样outDF
最终看起来像这样:
string1 string2
0 abc jkl
1 ghi pqr
2 mno dfe
3 stu pqr
编辑1:
我尝试按照this answer中的建议使用sample()
函数,但这只会导致相同的样本在所有行中重复:
outDF['string1'] = inpDF['string1']
outDF['string2'] = inpDF.sample(n=1).iloc[0,:]['string2']
给出:
string1 string2
0 abc pqr
1 ghi pqr
2 mno pqr
3 stu pqr
编辑2:
对于我的特定用例,即使从'n'行中选取值也足够了。因此,我尝试执行此操作(根据我在this answer中阅读的内容使用了inpDF.index
):
numRows = len(inpDF)
outDF['string1'] = inpDF['string1']
outDF['string2'] = inpDF.iloc[(inpDF.index + 2)%numRows,:]['string2']
但最终只是从同一行中选择值,而outDF
就是这样:
string1 string2
0 abc dfe
1 ghi jkl
2 mno pqr
3 stu vwx
我希望它应该是这样:
string1 string2
0 abc pqr
1 ghi vwx
2 mno dfe
3 stu jkl
答案 0 :(得分:1)
np.random.shuffle(df.string2)
print(df)
string1 string2
0 abc pqr
1 ghi vwx
2 mno def
3 stu jkl
如果您不想就地随机播放,请尝试:
df['string3']=np.random.permutation(df.string2)
print(df)
答案 1 :(得分:1)
为此您使用pandas.DataFrame.sample
:
df['string2'] = df.string2.sample(len(df.string2)).to_list()
print(df)
string1 string2
0 abc vwx
1 ghi jkl
2 mno def
3 stu pqr
或
df['string2'] = df.string2.sample(len(df.string2)).values