Как перемешать внешний индекс случайным образом, но упорядочить внутренний индекс в порядке возрастания в многоиндексном фрейме данных

#pandas #dataframe #multi-index #shuffle

Вопрос:

Следующий фрагмент кода создает образец фрейма данных:

 fruits=pd.DataFrame()
fruits['month']=['jan','feb','feb','march','jan','april','april','june','march','march','june','april']
fruits['fruit']=['apple','orange','pear','orange','apple','pear','cherry','pear','orange','cherry','apple','cherry']
ind_mnth=fruits['month'].values
ind_fruit=fruits['fruit'].values
fruits['price']=[30,20,40,25,30 ,45,60,45,25,55,37,60]
fruits_grp = fruits.set_index([ind_mnth, ind_fruit],drop=False)
 

Как я могу случайным образом перемешать внешний индекс и внутренний индекс в порядке возрастания в этом многоиндексном фрейме данных?

Комментарии:

1. таким образом, столбец фруктов зависит от индекса для сортировки?

2. да, колонка фруктов зависит от месяца.

Ответ №1:

вы могли бы попробовать что-то вроде этого:

 mnths = fruits.drop_duplicates(subset=['month']).sample(frac=1).reset_index().month.unique()
fruits.groupby(['month','fruit'])['price'].sum().loc[mnths]
 

сначала вы выбираете случайную сортировку месяцев во фрейме данных, затем группируете по месяцам и фруктам, которые будут отсортированы в алфавитном порядке, а затем индексируете, используя список случайно упорядоченных месяцев

Комментарии:

1. Цены суммируются/добавляются. Этого не должно быть.

2. они суммируются только в том случае, если есть повторяющиеся комбинации месяца и фруктов. Предполагая, что повторяющихся строк нет, это не будет проблемой

3. при условии, что в наборе данных имеются повторяющиеся строки месяца и фруктов, цены суммироваться не будут