在 pandas 中按行或按列对数据帧进行洗牌的简单有效的方法是什么?即如何编写一个函数,该函数shuffle(df, n, axis=0)
接受一个数据帧、多个 shufflen
和一个轴(axis=0
是行,axis=1
是列)并返回一个已经被洗牌的数据帧的副本n
。
编辑:关键是在不破坏数据框的行/列标签的情况下做到这一点。如果你只是洗牌df.index
,就会丢失所有的信息。我希望结果df
与原始结果相同,只是行的顺序或列的顺序不同。
Edit2:我的问题不清楚。当我说洗牌时,我的意思是独立洗牌每一行。因此,如果您有两列a
and b
,我希望每一行都自己打乱,这样您就不会像仅将每一行作为一个整体重新排序时那样在a
and之间具有相同的关联。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)