сводная таблица python - столбцы являются датами и должны быть правильно отсортированы - PullRequest
0 голосов
/ 02 мая 2018

Моя цель в следующем кадре данных - подсчитать, сколько автомобилей было продано в определенном месте за данный месяц. Вы заметите, что результаты сводки верны, НО столбцы (даты) не согласованы. Причина, по которой это противоречиво, заключается в том, что я собираю месяц в виде строки (если автомобиль был продан 9 октября и 10 октября, тогда я считаю 2 за октябрь).

Вопрос: как спроектировать примененный метод get_date таким образом, чтобы сводная таблица правильно сортировала даты? Или есть лучший способ подойти к этой проблеме, чтобы получить желаемый результат.

Таблица

enter image description here

Результат сводной таблицы:

enter image description here

Фрейм данных:

df = pd.DataFrame({"LOCATION":["USA","USA","USA","USA","JAPAN","JAPAN"],"CAR":["BMW","BMW","TOYOTA","FORD","BMW","FORD"],"SALE_DATE":pd.to_datetime(["2017-10-09","2017-09-28","2017-10-09","2017-10-12","2017-09-30","2017-09-30"])})

дата применения_строка (для агрегирования по месяцам):

def get_date_str(row):
    doi = row["SALE_DATE"]
    doi_str = "".join(doi.strftime('%B-%y'))
    return doi_str

пивот:

df.pivot_table(values="CAR", index="LOCATION", columns='SALE_DATE', aggfunc='count')

1 Ответ

0 голосов
/ 03 мая 2018

Вы можете сделать следующее:

Сначала извлеките месяц из даты:

df.SALE_DATE = pd.to_datetime(df.SALE_DATE).dt.month

Теперь пивот:

df = df.pivot_table(values="CAR", index="LOCATION", columns='SALE_DATE', aggfunc='count').fillna(0)

Сортировать по датам: df = df.reindex_axis (отсортировано (df.columns), ось = 1)

Преобразуйте их в строки:

months = {1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May',
            6: 'Jun', 7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec'}
df.columns = [months[c] for c in df.columns]
>>> df
                 Sep    Oct
LOCATION        
JAPAN            2.0    0.0
USA              1.0    3.0
...