Python 如何根据分类列洗牌数据帧

Python 如何根据分类列洗牌数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有一个数据帧,可以按人列(a、B、C、D等)分组,每个人都有一定数量的记录。问题是如何在不改变每组顺序的情况下洗牌这些人?考虑数据帧df df = pd.DataFrame(dict( Person=list('BBBEEEAAACCCZZZZZ'), Other=range(17) )) Other Person 0 0 B 1 1 B 2 2 B 3 3 E 4

假设我有一个数据帧,可以按
列(a、B、C、D等)分组,每个人都有一定数量的记录。问题是如何在不改变每组顺序的情况下洗牌这些人?

考虑数据帧
df

df = pd.DataFrame(dict(
    Person=list('BBBEEEAAACCCZZZZZ'),
    Other=range(17)
))

    Other Person
0       0      B
1       1      B
2       2      B
3       3      E
4       4      E
5       5      E
6       6      A
7       7      A
8       8      A
9       9      C
10     10      C
11     11      C
12     12      Z
13     13      Z
14     14      Z
15     15      Z
16     16      Z

使用
np.random.permutation
重新排列
人员
,然后
设置索引
/
loc
/
重置索引

df.set_index('Person').loc[
    np.random.permutation(df.Person.unique())
].reset_index()

   Person  Other
0       Z     12
1       Z     13
2       Z     14
3       Z     15
4       Z     16
5       A      6
6       A      7
7       A      8
8       C      9
9       C     10
10      C     11
11      B      0
12      B      1
13      B      2
14      E      3
15      E      4
16      E      5

来自同一个人的记录已经在一起了,还是分散在一起了,如果是真的,你想怎么洗牌呢?对不起。在这方面,我本应该使它不那么令人困惑。我想说,它们已经组合在一起了。