パンダのデータフレームを行ごとまたは列ごとにシャッフルする簡単で効率的な方法は何ですか? shuffle(df, n, axis=0)
つまり、データフレーム、シャッフルの数n
、および軸 (axis=0
行、axis=1
列) を受け取り、何度もシャッフルされたデータフレームのコピーを返す関数を作成する方法n
です。
編集:データフレームの行/列ラベルを破壊せずにこれを行うことが重要です。シャッフルdf.index
すると、すべての情報が失われます。df
行の順序または列の順序が異なることを除いて、結果を元と同じにしたい。
Edit2 :私の質問は不明確でした。行をシャッフルするとは、各行を個別にシャッフルすることを意味します。したがって、 と の 2 つの列がある場合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)