Разделяйте групповые группы на колонны в пандах
Я использую 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
Есть ли более простой способ сделать это? Кажется, что в пандах должна быть естественная операция, чтобы разбить категории на столбцы, и все же мне пришлось написать словарь, чтобы решить ее. Разве это не распространенная проблема? Есть ли способ сделать это автоматически?