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