我有以下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。所有具有Type
1的行都位于最上面,然后是具有Type
2的行,然后是具有Type
3的行,依此类推。
我想重新整理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更擅长播放短片段。我总共有四个声音。