Как мы можем написать функцию, которая будет агрегировать, ранжировать, сортировать по бинам каждый столбец df, переименовывать агрегированные, добавляя префикс, ранжированные и объединенные в столбцы столбцы, а затем присоединять новые столбцы rank & bin к df?
Import pandas as pd
data = {"index_id": range(101, 131),
'company': ['Opera', 'Opera', 'Opera', 'Opera', 'Opera', 'Opera',
'Firefox', 'Firefox', 'Firefox', 'Firefox', 'Firefox', 'Firefox',
'Safari', 'Safari', 'Safari', 'Safari', 'Safari', 'Safari',
'Brave', 'Brave', 'Brave', 'Brave', 'Brave', 'Brave',
'Chrome', 'Chrome', 'Chrome', 'Chrome', 'Chrome', 'Chrome'],
"rating": [4, 5, 3, 3, 3, 3,
4, 5, 5, 1, 5, 5,
1, 4, 1, 2, 1, 2,
1, 5, 1, 5, 1, 5,
5, 5, 5, 4, 5, 4]
}
df = pd.DataFrame(data)
df = df.groupby(['company']).agg({'rating':['std', 'mean']})
df.columns = ['rating_std', 'rating_mean']
df_rank = df.rank(ascending = 0, method = 'dense').add_prefix('rank_')
output = df_rank.copy(deep=True)
bin_labels = ['Bronze', 'Silver', 'Gold', 'Platinum', 'Diamond']
output['bin_rank_rating_std'] = pd.qcut(output['rank_rating_std'],
q=[0, .2, .4, .6, .8, 1],
labels=bin_labels)
output['bin_rank_rating_mean'] = pd.qcut(output['rank_rating_mean'],
q=[0, .2, .4, .6, .8, 1],
labels=bin_labels)
В df_rank я смог ранжировать стандартное отклонение и среднее значение, затем добавить префикс ранга, но не мог понять, как складывать и переименовывать каждый ранжированный столбец, не записывая каждый столбец. Я хочу написать функцию или использовать for-l oop, потому что с моим исходным набором данных. У меня есть 30 столбцов, которые я буду ранжировать и сортировать, поэтому я не могу назвать каждый из них в функции. Вывод данных будет выглядеть так.