什么是一个简单而有效的方法来洗牌熊猫中的数据框架,按行或按列?例如,如何编写一个函数 shuffle(df, n, axis=0)
,该函数接受一个数据帧、多个洗牌 n
和一个轴(axis=0
是行,axis=1
是列) ,并返回一个已经洗牌 n
次的数据帧的副本。
编辑 : 关键是在不破坏数据框架的行/列标签的情况下执行此操作。如果你只是洗牌 df.index
丢失所有的信息。我希望得到的 df
与原始的相同,只是行的顺序或列的顺序不同。
编辑2 : 我的问题不清楚。当我说洗牌的行,我的意思是洗牌每一行独立。所以如果你有两列 a
和 b
,我希望每一行都有自己的顺序,这样你就不会像重新排序每一行一样,在 a
和 b
之间有相同的关联。比如:
for 1...n:
for each col in df: shuffle column
return new_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)