Использование python 3.7 и pandas 0.23.4.Я пытаюсь сделать сводные таблицы с упорядоченными категориальными данными.Если я включаю поля, промежуточные итоги, кажется, не в правильном порядке.
import pandas as pd
m='male'
f='female'
data = {'num': [0,1,2,3,4,5,6,7,8,9],
'age': [1,2,2,3,3,3,3,1,2,3],
'sex': [f,f,f,f,f,f,f,m,m,m]}
df = pd.DataFrame(data=data)
df['age1'] = pd.Categorical(df['age'],categories=[3,2,1],ordered=True)
df['sex1'] = pd.Categorical(df['sex'],categories=[m,f],ordered=True)
pd.pivot_table(df,values='num',index='age1',columns='sex1',aggfunc='count',margins=True)
Вывод (неправильный порядок полей, суммы «Все» не в правильных строках или столбцах):
sex1 male female All
age1
3 1 4 2
2 1 2 3
1 1 1 5
All 7 3 10
Ожидаемый результат (правильный порядок полей):
sex1 male female All
age1
3 1 4 5
2 1 2 3
1 1 1 2
All 3 7 10
В этом примере может быть лучше создать категории с order = False.Однако большая часть моих данных автоматически упорядочивается (с использованием pd.cut), поэтому я хотел бы знать, является ли это предполагаемым поведением, и если да, есть ли способ удалить упорядочение для категории, которая была создана с помощью заказа?
Редактировать - вот пример использования pd.cut.Я изменил значения столбца age, чтобы они отображались в обратном порядке.
import pandas as pd
m='male'
f='female'
data = {'num': [0,1,2,3,4,5,6,7,8,9],
'age': [3,3,3,3,2,2,1,1,2,3],
'sex': [f,f,f,f,f,f,f,m,m,m]}
df = pd.DataFrame(data=data)
df['cut'] = pd.cut(df['age'],[1,2,3,4],labels=['<2','2','>2'],right=False)
pd.pivot_table(df,values='num',index='cut',columns='sex',aggfunc='count',margins=True)
Вывод, опять же с неправильными полями строки (соответствует упорядоченной категории из pd.cut).
sex female male All
cut
<2 1 1 5
2 2 1 3
>2 4 1 2
All 7 3 10
Ожидаемый результат будет правильным порядком полей строки.
sex female male All
cut
<2 1 1 2
2 2 1 3
>2 4 1 5
All 7 3 10