我有一个数据框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'})
任何帮助表示赞赏。
答案 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