如何根据分类列对pandas数据帧进行混洗

时间:2017-07-26 02:52:58

标签: python pandas dataframe

假设我有一个可以按person列(A,B,C,D等)分组的数据框,并且每个人都有一定数量的记录。问题是如何在不改变每个组内的顺序的情况下改变那些人?

1 个答案:

答案 0 :(得分:4)

考虑数据框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重新调整Person,然后set_index / loc / reset_index

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