当前位置: 首页 > 面试题库 >

随机播放DataFrame行

何睿范
2023-03-14
问题内容

我有以下DataFrame:

    Col1  Col2  Col3  Type
0      1     2     3     1
1      4     5     6     1
...
20     7     8     9     2
21    10    11    12     2
...
45    13    14    15     3
46    16    17    18     3
...

从csv文件读取DataFrame。所有具有Type1的行都位于最上面,然后是具有Type2的行,然后是具有Type3的行,依此类推。

我想重新整理DataFrame行的顺序,以便将所有行Type混合在一起。可能的结果可能是:

    Col1  Col2  Col3  Type
0      7     8     9     2
1     13    14    15     3
...
20     1     2     3     1
21    10    11    12     2
...
45     4     5     6     1
46    16    17    18     3
...

我该如何实现?


问题答案:

使用Pandas的惯用方式是使用.sample数据框的方法对所有行进行采样而无需替换:

df.sample(frac=1)

frac关键字参数指定的行的分数到随机样品中返回,所以frac=1装置返回所有行(随机顺序)。

注意: 如果您希望就地改组数据帧并重置索引,则可以执行例如

df = df.sample(frac=1).reset_index(drop=True)

在此,指定drop=True可防止.reset_index创建包含旧索引条目的列。

后续注: 虽然它可能不会像上面的操作是 就地 ,蟒蛇/大熊猫是足够聪明,不要做其他的malloc的洗牌后的对象。也就是说,即使 参考
对象已更改(我的意思id(df_old)是与相同id(df_new)),底层C对象仍然相同。为了证明确实如此,您可以运行一个简单的内存分析器:

$ python3 -m memory_profiler .\test.py
Filename: .\test.py

Line #    Mem usage    Increment   Line Contents
================================================
     5     68.5 MiB     68.5 MiB   @profile
     6                             def shuffle():
     7    847.8 MiB    779.3 MiB       df = pd.DataFrame(np.random.randn(100, 1000000))
     8    847.9 MiB      0.1 MiB       df = df.sample(frac=1).reset_index(drop=True)


 类似资料:
  • 问题内容: 我有一个像这样的数组: 如何将其随机/随机播放? 问题答案: 实际无偏混洗算法是Fisher-Yates(aka Knuth)。

  • 问题内容: 和之间有什么区别? 我已经阅读了文档页面,但是当我只想随机地对数组元素进行随机排列时,我不明白两者之间是否有任何区别。 确切地说,假设我有一个数组。 如果我想生成x的随机排列,那么和之间有什么区别? 问题答案: 与以下内容有两个区别: 如果传递了数组,它将返回该数组的改组后的 副本 ;将数组改组到位 如果传递一个整数,它将返回一个改组范围,即 如果x是整数,则随机置换np.arange

  • 问题内容: 我试图将以下Python代码转换为Go 但是我发现Go版本冗长而笨拙,因为没有shuffle函数,我不得不实现接口和转换类型。 什么是我的代码的惯用Go版本? 问题答案: 由于列表只是1到25之间的整数,因此可以使用Perm: 请注意,使用由给定的置换是重新排列任何数组的有效方法。

  • 我正在尝试优化我的火花应用工作。 我试图理解这个问题的要点:如何在唯一键上连接数据帧时避免混乱? > 我已经确保必须发生加入操作的键分布在同一分区中(使用我的自定义分区程序)。 我也不能做广播加入,因为我的数据可能会根据情况变大。 在上面提到的问题的答案中,重新分区只优化了连接,但我需要的是无需切换即可连接。在分区内的键的帮助下,我对连接操作很满意。 有可能吗?如果不存在类似的功能,我想实现像jo

  • 我需要你的帮助。我正在开发一个android应用程序,我需要从sd卡中随机播放一首歌。我尝试了这种方式: 使用这种方法,我从文件夹中随机选择一首歌曲(此文件夹仅包含mp3文件)。 然后我用这个方法播放提取的歌曲: 我想知道如何使用MediaPlayer播放智能手机sd卡上的歌曲

  • 如何在按钮点击时发出随机的声音? 我对编程世界很陌生,我以前检查过上面的链接,试图用它作为播放随机声音的参考。我使用SoundPool因为我知道它比MediaPlayer更擅长播放短片段。我总共有四个声音。