我的数据框是这样的

sampleID  col1 col2
   1        1   63
   1        2   23
   1        3   73
   2        1   20
   2        2   94
   2        3   99
   3        1   73
   3        2   56
   3        3   34

我需要将相同的样本放在一起,并且col1的顺序必须与上面的dataframe相同。
所以我需要这样
sampleID  col1 col2
   2        1   20
   2        2   94
   2        3   99
   3        1   73
   3        2   56
   3        3   34
   1        1   63
   1        2   23
   1        3   73

我该怎么做?如果我的例子不清楚,请告诉我。

最佳答案

假设你想通过sampleID洗牌首先df.groupby,洗牌(import random,然后调用pd.concat

In [423]: groups = [df for _, df in df.groupby('sampleID')]

In [424]: random.shuffle(groups)

In [427]: pd.concat(groups).reset_index(drop=True)
Out[427]:
   sampleID  col1  col2
0         2     1    20
1         2     2    94
2         2     3    99
3         1     1    63
4         1     2    23
5         1     3    73
6         3     1    73
7         3     2    56
8         3     3    34

使用df.reset_index(drop=True)重置索引,但这是一个可选步骤。

关于python - 按组随机排列 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45585860/

10-11 19:45