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 n
und eine Achse ( axis=0
ist Zeilen, axis=1
ist Spalten) verwendet und eine Kopie des Datenrahmens zurückgibt, der n
mal 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 df
mit 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 a
und b
, möchte ich, dass jede Zeile für sich gemischt wird, damit Sie nicht die gleichen Assoziationen zwischen a
und haben, b
wie 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)