python - 如何根据分类列对 pandas 数据框进行洗牌

标签 python pandas dataframe

假设我有一个数据框,可以按 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/

相关文章:

python - 无法在 python (Anaconda) 中安装 wordcloud

python - pandas 中按组划分的独特值的一年滚动计数

python - 通过 Numpy/Pandas 使用 (n x 1) 数据创建一个 n x m 多项式数组

r - 根据 group_by 行及其列值选择行

apache-spark - 每行计算并在 DataFrame PySpark 中添加新列 - 更好的解决方案?

python - Django 1.8 使用多个 DetailView

python - 使用reportlab和django框架在一个pdf文件中生成多个二维码

r - 如何添加缺失的年份和 0 以完成数据

python - 超过 url Tensorflow Serving Python 请求的最大重试次数

python - Pandas 条形图中带有黑色边框的白色误差条