python - 改组/排列 Pandas 中的DataFrame

标签 python numpy pandas

在 pandas 中按行或按列对数据帧进行洗牌的简单而有效的方法是什么? IE。如何编写函数shuffle(df, n, axis=0)这需要一个数据帧,许多洗牌n , 和一个轴(axis=0 是行,axis=1 是列)并返回已洗牌的数据帧的副本 n次。

编辑:关键是在不破坏数据框的行/列标签的情况下执行此操作。如果你只是洗牌df.index这会丢失所有这些信息。我想要结果 df除了行的顺序或列的顺序不同之外,与原来的相同。

Edit2:我的问题不清楚。当我说洗牌时,我的意思是独立洗牌每一行。因此,如果您有两列 ab ,我希望每一行都自己洗牌,这样你在 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)

最佳答案

使用numpy的random.permuation函数:

In [1]: df = pd.DataFrame({'A':range(10), 'B':range(10)})

In [2]: df
Out[2]:
   A  B
0  0  0
1  1  1
2  2  2
3  3  3
4  4  4
5  5  5
6  6  6
7  7  7
8  8  8
9  9  9


In [3]: df.reindex(np.random.permutation(df.index))
Out[3]:
   A  B
0  0  0
5  5  5
6  6  6
3  3  3
8  8  8
7  7  7
9  9  9
1  1  1
2  2  2
4  4  4

关于python - 改组/排列 Pandas 中的DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772009/

相关文章:

python - 这个 SQL 语句有 django ORM 版本吗?

python - 在 pandas 的元组列表中选择行

python - 如何将原始数据与集群数据关联起来

python - 获取 pandas.DataFrame 其余部分的最聪明方法是什么?

python - 在卷积神经网络训练期间定期评估大型测试集

python - 使用元组过滤和拆包处理空情况

python - Pandas 通过 Compare-cumsum-groupby 模式跟踪连续的邻近数字

python-3.x - 如何在python中使用opencv-python将RGB888转换为RGB565?

python - 使用 matplotlib 和 Pandas DataFrame 绘制数据覆盖图

python - 如何使用python在excel单元格中的(...)内获取整数值并将其存储到变量中