【发布时间】:2013-03-24 05:07:34
【问题描述】:
在 pandas 中按行或按列对数据帧进行洗牌的简单而有效的方法是什么? IE。如何编写一个函数shuffle(df, n, axis=0),它接受一个数据帧、多个洗牌n 和一个轴(axis=0 是行,axis=1 是列)并返回已洗牌的数据帧的副本@987654326 @时代。
编辑:关键是在不破坏数据框的行/列标签的情况下执行此操作。如果您只是洗牌df.index,则会丢失所有这些信息。我希望得到的 df 与原始结果相同,只是行的顺序或列的顺序不同。
Edit2:我的问题不清楚。当我说洗牌时,我的意思是独立洗牌每一行。因此,如果您有两列 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)
【问题讨论】:
-
^ 你的回答确实回答了这个问题,但似乎不是人们正在寻找的答案