Що таке простий та ефективний спосіб перетасувати кадр даних у пандах, за рядками чи стовпцями? Тобто як записати функцію, shuffle(df, n, axis=0)
яка приймає фрейм даних, кількість перетасовувань n
та вісь ( axis=0
дорівнює рядкам, axis=1
є стовпчиками) і повертає копію кадру даних, перемішану n
разів.
Редагувати : ключ - це робити, не руйнуючи мітки рядків / стовпців фрейму даних. Якщо ви просто перетасуєте, df.index
що втратить всю цю інформацію. Я хочу, щоб результат df
був таким самим, як оригінал, за винятком того, що порядок рядків або порядок стовпців різний.
Edit2 : Моє запитання було незрозумілим. Коли я кажу про перемішування рядків, я маю на увазі перемішування кожного рядка незалежно. Отже, якщо у вас є два стовпці 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)