在pandas中对DataFrame进行洗牌/排列
- 论坛
- 在pandas中对DataFrame进行洗牌/排列
13 浏览
在pandas中对DataFrame进行洗牌/排列
如何用简单高效的方式在pandas中对DataFrame进行行或列的洗牌?即如何编写一个函数shuffle(df, n, axis=0)
,该函数接受一个DataFrame、一个洗牌次数n
和一个轴(axis=0
表示行,axis=1
表示列),并返回一个已经洗牌n
次的DataFrame的副本。
编辑:关键是在不破坏DataFrame的行/列标签的情况下完成。如果只洗牌df.index
,那么所有的信息都会丢失。我希望生成的df
与原始的DataFrame相同,只是行的顺序或列的顺序不同。
编辑2:我的问题不太清楚。当我说洗牌行时,我的意思是独立地对每一行洗牌。所以如果你有两列a
和b
,我希望每一行都独立地进行洗牌,这样就不会像整行重新排序那样存在a
和b
之间的相互关联。类似于:
对于每一个 1...n: 对于df的每一列:洗牌列 返回新的df
但是希望比朴素的循环更高效。下面的代码对我无效:
def shuffle(df, n, axis=0): shuffled_df = df.copy() for k in range(n): shuffled_df.apply(np.random.shuffle(shuffled_df.values),axis=axis) return shuffled_df df = pandas.DataFrame({'A':range(10), 'B':range(10)}) shuffle(df, 5)