Разделяйте групповые группы на колонны в пандах

Я использую pandas чтобы отслеживать мои расходы и нужно разделить расходы на категории. Данные, с которых я начинаю, отформатированы следующим образом:

>>> import pandas as pd
>>>
>>> input_data = pd.DataFrame(
...     [
...         (pd.datetime(2018, 1, 1), 10, 'car'),
...         (pd.datetime(2018, 1, 1), 10, 'car'),
...         (pd.datetime(2018, 1, 2), 10, 'health'),
...         (pd.datetime(2018, 1, 2), 10, 'groceries'),
...         (pd.datetime(2018, 1, 3), 10, 'car'),
...         (pd.datetime(2018, 1, 3), 10, 'health'),
...     ],
...     columns = ['date', 'expense', 'category'],
... ).set_index('date')
>>>
>>> input_data
            expense   category
date                          
2018-01-01       10        car
2018-01-01       10        car
2018-01-02       10     health
2018-01-02       10  groceries
2018-01-03       10        car
2018-01-03       10     health

Обратите внимание, что дата может повториться, потому что я могу совершать несколько транзакций в день.

Я хочу превратить DataFrame с помощью DataFrame.groupby() иметь один столбец для каждой категории, одну строку для каждого периода времени, а ячейками должна быть сумма денег, потраченная в каждой категории и периоде времени.

Я уже решил проблему, используя следующий код:

>>> pd.DataFrame(
...     {
...         name: serie.groupby(level=0).sum()
...         for name, serie in input_data.groupby('category').expense
...     }
... ).fillna(0)
             car  groceries  health
date                               
2018-01-01  20.0        0.0     0.0
2018-01-02   0.0       10.0    10.0
2018-01-03  10.0        0.0    10.0

Есть ли более простой способ сделать это? Кажется, что в пандах должна быть естественная операция, чтобы разбить категории на столбцы, и все же мне пришлось написать словарь, чтобы решить ее. Разве это не распространенная проблема? Есть ли способ сделать это автоматически?

0 ответов

Другие вопросы по тегам