Python-解包两个索引数据框

时间:2018-12-12 18:03:22

标签: python pandas python-2.7 dataframe pandas-groupby

我有一个数据框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 :(得分:1)

pd.pivot_table + groupby + pd.Grouper

您可以将系列值转换为列标签,然后然后 #include <stdint.h> #include <stdio.h> typedef union { uint32_t u32; uint8_t u8 [4]; } uint32_union_t; int main (void) { uint32_union_t x; x.u32 = 1234567; for(size_t i=0; i<4; i++) { printf("%X ", x.u8[i]); } printf("\n"); x.u32 = ~x.u32; for(size_t i=0; i<4; i++) { printf("%X ", x.u8[i]); } printf("\n"); }

groupby

pd.crosstab + to_period

您还可以通过交叉列表执行上述操作:

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

设置

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