在Pandas DataFrame矢量化操作中随机选择行

时间:2019-03-28 15:29:12

标签: python pandas

我想在对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

2 个答案:

答案 0 :(得分:1)

尝试np.random.shuffle()

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