Was ist eine einfache und effiziente Möglichkeit, einen Datenrahmen in Pandas nach Zeilen oder Spalten zu mischen? Dh wie man eine Funktion schreibt shuffle(df, n, axis=0), die einen Datenrahmen, eine Anzahl von Mischvorgängen nund eine Achse ( axis=0ist Zeilen, axis=1ist Spalten) verwendet und eine Kopie des Datenrahmens zurückgibt, der nmal gemischt wurde.
Bearbeiten : Mit dieser Taste können Sie die Zeilen- / Spaltenbeschriftungen des Datenrahmens nicht zerstören. Wenn Sie nur mischen df.index, gehen all diese Informationen verloren. Ich möchte, dass das Ergebnis dfmit dem Original identisch ist, außer dass die Reihenfolge der Zeilen oder Spalten unterschiedlich ist.
Edit2 : Meine Frage war unklar. Wenn ich "Zeilen mischen" sage, meine ich "mischen" jede Zeile einzeln. Wenn Sie also zwei Spalten haben aund b, möchte ich, dass jede Zeile für sich gemischt wird, damit Sie nicht die gleichen Assoziationen zwischen aund haben, bwie Sie es tun, wenn Sie nur jede Zeile als Ganzes neu anordnen. Etwas wie:
for 1...n:
for each col in df: shuffle column
return new_df
Aber hoffentlich effizienter als naives Looping. Das funktioniert bei mir nicht:
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)