Python - распаковка двухиндексного фрейма данных - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть фрейм данных, df, состоящий из финансовых транзакций за определенный период времени.Я переиндексировал df к дате каждой транзакции.

                 Description      Amount       Category
date      
2018-12-03       Stop & Shop      $100.00      Groceries
2018-12-03       Shell            $50.00       Gas
2018-12-02       NYC Parking      $25.00       Auto
2018-12-01       Tonys Pizza      $14.00       Dining
2018-11-30       Dr Jones         $100.00      Medical

Я пытаюсь сгруппировать эти данные по месяцам и категориям расходов.EG:

            Auto    Dining   Gas      Groceries    Medical
Dec-2018    $25.00  $14.00   $50.00   $100.00      $100.00
Nov-2018    $35.00  $72.00   $40.00   $125.00      $0.00 
 ...
Jan-2018 

Я пытался добиться этого, используя 'groupby' и "Resample.agg", чтобы накапливать транзакции по категориям и месяцам, но не знаю, как манипулировать результирующим выводом "фрейма данных" для отображениявывод в формате, на который я надеюсь.

output = df.groupby('Category').resample('M').agg({"Amount":'sum'})

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 12 декабря 2018

pd.pivot_table + groupby + pd.Grouper

Можно преобразовать значения серии в метки столбцов и затем groupby:

df = pd.pivot_table(df, index=df.index, columns='Category', values='Amount')\
       .groupby(pd.Grouper(freq='M')).sum().fillna(0)

print(df)

Category    Auto  Dining   Gas  Groceries  Medical
2018-11-30   0.0     0.0   0.0        0.0    100.0
2018-12-31  25.0    14.0  50.0      100.0      0.0

pd.crosstab + to_period

Вы также можете выполнить вышеуказанные операции с помощьюкросс-табуляция:

df = pd.crosstab(df.index.to_period('M'), columns=df['Category'],
                 values=df['Amount'], aggfunc='sum').fillna(0).rename_axis(None)

print(df)

Category  Auto  Dining   Gas  Groceries  Medical
2018-11    0.0     0.0   0.0        0.0    100.0
2018-12   25.0    14.0  50.0      100.0      0.0

Настройка

df = pd.DataFrame({'Amount': [100.0, 50.0, 25.0, 14.0, 100.0],
                   'Category': ['Groceries', 'Gas', 'Auto', 'Dining', 'Medical'],
                   'Description': ['Stop&Shop', 'Shell', 'NYCParking', 'TonysPizza', 'DrJones']},
                  index=pd.to_datetime(['2018-12-03', '2018-12-03', '2018-12-02', '2018-12-01', '2018-11-30']))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...