我有以下数据框:
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
...
DataFrame 是从 CSV 文件中读取的。所有具有 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
...
我怎样才能做到这一点?
原文由 JNevens 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 Pandas 执行此操作的惯用方法是使用数据框的
.sample
方法对所有行进行采样而不进行替换:frac
关键字参数指定要在随机样本中返回的行的分数,所以frac=1
表示返回所有行(以随机顺序)。注意: 如果您希望就地改组您的数据框并重置索引,您可以执行例如
在这里,指定
drop=True
可以防止.reset_index
创建包含旧索引条目的列。后续说明: 虽然上面的操作看起来可能不是 in-place ,但 python/pandas 足够聪明,不会为 shuffled 对象做另一个 malloc。也就是说,即使 引用 对象已更改(我的意思是
id(df_old)
与id(df_new)
),底层 C 对象仍然是相同的。为了证明确实如此,您可以运行一个简单的内存分析器: