gpt4 book ai didi

python - 改组/排列 Pandas 中的DataFrame

转载 作者:IT老高 更新时间:2023-10-28 21:38:51 27 4
gpt4 key购买 nike

在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com