如何通过保留除一个属性之外的所有属性来随机洗牌人口?

How to randomly shuffle a populaiton by preserving all properites except one?

space 的球形区域充满了特定分布的更小、不同大小的球体。每个球体都与一些物理属性相关联:位置、半径、质量、速度和 ID 都表示为 1d 或 3d numpy 数组。我想以完全 随机 的方式洗牌这些球体,这样任何一个球体都会保留它的所有属性,除了它的 3d 位置数组。我在这里遇到过类似的问题 (Randomly shuffle columns except first column),但是,有没有一种简单快速的 pythonic 方法可以在不使用 DataFrame 的情况下做到这一点?

感谢您的帮助。

您可以实施 Knuth 洗牌 (https://en.wikipedia.org/wiki/Random_permutation),它非常简单。

您可以调整实现算法以仅交换所需的属性。

如果您使用的是 pandas,您可以只随机排列一列:

df['col'] = df['col'].sample(frac=1).values

这对列的任何子集都同样有效,例如

cols = ['col1', 'col2']
df[cols] = df[cols].sample(frac=1).values

两列打乱在一起,即它们各自的值保持对齐。

另见