У меня есть следующий фрейм данных (называется aa1 ):
d = {'Index' : pd.Series([25, 7, 7, 5, 5, 8])}
aa1 = pd.DataFrame(d)
Я создал новый столбец с именем Quartile_Index , который оценивает квартиль для значений столбца Index
(примечание: это было лучшее решение, которое я мог найти, поскольку библиотека pd.qcut не позволяет иметь дублирующиеся ребра бина):
quantile_frame = aa1.quantile(q=[0.25, 0.5, 0.75])
quantile_ranks = []
for index, row in aa1.iterrows():
if (row['Index'] <= quantile_frame.ix[0.25]['Index']):
quantile_ranks.append('q1')
elif (row['Index'] >= quantile_frame.ix[0.25]['Index'] and row['Index'] <= quantile_frame.ix[0.5]['Index']):
quantile_ranks.append('q2')
elif (row['Index'] >= quantile_frame.ix[0.5]['Index'] and row['Index'] <= quantile_frame.ix[0.75]['Index']):
quantile_ranks.append('q3')
else:
quantile_ranks.append('q4')
aa1['Quartile_Index'] = quantile_ranks
Это лучшее решение, которое я могу придумать, но мне нужна помощь с двумя вопросами для дальнейшей оптимизации моего кода / логики:
Есть ли более простой способ вызвать квартильный столбец с более простым кодом? pd.qcut не позволяет вам иметь повторяющиеся края корзины, так что это не решение.
Мне нужно произвести выполнение столбца квантиля в 30 других фреймах данных панд ( aa1 , aa2, aa3 и т. Д.). Я не хочу повторять это 30 раз, так есть ли решение? Я пока еще не настолько продвинут с петлями.