【发布时间】:2018-08-11 20:51:50
【问题描述】:
我目前正在从事数据分析,并正在构建一个小型会计应用程序来跟踪我的开支。
我的目标是在一个 Django 应用程序中跟踪我的开支,使用 Pandas 对其进行一些分析,并使用 Matplotlib 将其可视化。
我的数据基础来自这样的 Django ORM 查询:
qs = MyExpenses.objects.values('date', 'amount', 'category')
然后我使用 Pandas 的 from_records 方法创建一个索引 DataFrame:
df = pd.DataFrame.from_records(qs, index='date', coerce_float=True)
df.index = pd.to_datetime(df.index) # manually make index a proper DateTimeIndex, datetime.date objects don't seem to be converted automatically
使用df.head()检查DataFrame的内容:
amount category
date
2017-12-29 14.90 Food
2017-12-27 2.98 Household
2017-12-27 9.72 Food
2017-12-24 2.00 Food
2017-12-23 1.49 Household
目前看起来不错。
此时我不知道如何正确进行。 我希望每月按类别汇总我的费用。
这个 groupby 操作:
summed_df = df.groupby([pd.Grouper(freq='1M'), 'category']).sum()
返回正确聚合的数据:
amount
date category
2016-02-29 Cosmetics 2.45
Food 376.41
Household 43.82
Leisure 630.13
2016-03-31 Food 345.41
Household 14.76
Leisure 553.35
...
显然 Panda 使用日期和类别的组合索引作为 x 轴,将金额列作为单个数据系列。如上所述,这不是我想要的。
因此,我必须以另一种方式求和,或者以某种方式从索引中删除类别并再次使其成为常规列,但我不知道如何处理。
那里的一些 Pandas 破解可以帮助我吗?
【问题讨论】:
-
你在寻找什么样的情节?你能描述一下你的理想情节是什么样的吗?
-
你应该看看其他问题,例如this recent one 有一个 minimal reproducible example 和所需输出的清晰描述,以便可以回答。还要说明其他问题在多大程度上不能帮助您解决问题。
-
所需的输出是一个折线图,x 轴是时间,y 轴是花费的总和,每个类别都有一个系列。抱歉,如果我最初的帖子没有说明这一点。
-
这似乎与 this question here 重复
标签: python pandas matplotlib