随机播放DataFrame行
我有以下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)