Какой простой и эффективный способ перетасовать файл данных в pandas, по строкам или по столбцам? То есть как написать функцию 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)