```
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import datetime
df = pd.read_excel("Baltimore Towing Division.xlsx",sheet_name = "TowingData")
df['Month'] = pd.DatetimeIndex(df['TowedDate']).strftime("%b")
df['Week day'] = pd.DatetimeIndex(df['TowedDate']).strftime("%a")
monthOrder = ['Jan', 'Feb', 'Mar', 'Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
dayOrder = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']
Pivotdf = pd.pivot_table(df, values='TowedDate',index='Month',
columns='Week day',
fill_value=0,
aggfunc= 'count',
margins = True, margins_name='Total')
print(Pivotdf)
```
Добавление итоговой строки и итогового столбца в сводную таблицу, но месяцы и дни недели не организованы.
Если я добавлю какую-либо функцию переупорядочения для месяцев и дней недели, по какой-то причине сводная таблица потеряет поля, но сделает правильный порядок месяцев и дней недели.
Сводной код:
Pivotdf = pd.pivot_table(df, values='TowedDate',index='Month',
columns='Week day',
fill_value=0,
aggfunc= 'count',
margins = True, margins_name='Total').loc[monthOrder,dayOrder]
@Флурш. Если вы используете CategoricalIndex
, вы не можете добавлять новые столбцы без изменения категориального индекса до...
@Corralien: Хороший вопрос. Это, безусловно, может быть недостатком использования категориального индекса.
Вы потеряли Total
, потому что он не включен в monthOrder
и dayOrder
:
Pivotdf = pd.pivot_table(df, values='TowedDate',index='Month',
columns='Week day',
fill_value=0,
aggfunc= 'count',
margins = True, margins_name='Total') \
.loc[monthOrder + ['Total'], dayOrder + ['Total']]
print(Pivotdf)
# Output
Week day Mon Tue Wed Thu Fri Sat Sun Total
Month
Jan 0 0 1 0 0 0 0 1
Feb 1 1 0 0 1 2 1 6
Mar 0 1 0 0 2 1 1 5
Apr 0 0 1 1 0 0 0 2
May 0 0 1 0 0 1 1 3
Jun 0 1 0 0 0 0 1 2
Jul 0 1 2 1 1 0 1 6
Aug 1 0 1 1 0 0 2 5
Sep 2 0 1 0 1 0 0 4
Oct 2 1 0 0 0 1 0 4
Nov 1 2 0 0 2 1 1 7
Dec 0 1 1 0 2 1 0 5
Total 7 8 8 3 9 7 8 50
Попробуйте сделать значения в столбцах
Month
иWeek day
категориальными (pandas.Categorical
) и установите аргументorder
равнымTrue
. Таким образом, значения сортируются не в алфавитном порядке, а в соответствии с указанным вами порядком.