У меня есть кадр данных, который является результатом работы группы с использованием категориальной переменной, созданной pd.cut.pandas: как отсортировать результаты groupby с использованием категориальной переменной pd.cut
import pandas as pd
import numpy as np
di = pd.DataFrame({'earnings':pd.np.random.choice(10000, 10000), 'counts':[1] * 10000})
brackets=append(np.arange(0,5001,500),100000000)
di['earncat']=pd.cut(di['earnings'], brackets,right=False,retbins=True)[0]
di_everyone=di.groupby('earncat').sum()[['counts']]
di_everyone.sort_index(inplace=True)
di_everyone.to_string
И это выход,
[0, 500) 83,005,823
[1000, 1500) 11,995,255
[1500, 2000) 13,943,052
[2000, 2500) 11,967,696
[2500, 3000) 10,741,178
[3000, 3500) 9,749,914
[3500, 4000) 6,833,928
[4000, 4500) 7,150,125
[4500, 5000) 4,655,773
[500, 1000) 9,718,753
[5000, 100000000) 26,588,622
Я не знаю, почему на второй в последней строке появится [500, 1000). Я решил не называть «заработок», потому что хочу увидеть разбивку. Как я могу сортировать на заработке?
Заранее спасибо
Какую версию панд вы используете? Начиная с 0.16.1, существует поддержка категориальных переменных в индексе, которые будут правильно сортировать – joris
Ваш индекс преобразуется в строки перед их сортировкой. df_everyone.index показывает Index ([u '[0, 500) », ... Таким образом, он сортируется по заработку. Просто не так, как ты этого хочешь. – firelynx