假设我有一个数据框,可以按 person
列(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
重新排列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
关于python - 如何根据分类列对 pandas 数据框进行洗牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45316624/