我有一个很大的数据集,包括多年来每十分钟计时一次的太阳能电池板产量记录。我想得到一个条形图,显示每年这些日志的月总和。
我不知道这是否有意义,所以让我用一个例子来解释。
通过重新采样,我得到了以下数据框:
# othermodule.py
import ticket
usersinput = ticket.value.get()
print usersinput
我认为实现我想要的情节的最佳方法是以某种方式将其转换为带有
的数据框所以,例如:
Last updated
2017-01-31 00:00:00+01:00 24.1
2017-02-28 00:00:00+01:00 44.8
2017-03-31 00:00:00+02:00 140.1
2017-04-30 00:00:00+02:00 168.7
2017-05-31 00:00:00+02:00 194.4
2017-06-30 00:00:00+02:00 214.7
2017-07-31 00:00:00+02:00 204.6
2017-08-31 00:00:00+02:00 159.5
2017-09-30 00:00:00+02:00 117.3
2017-10-31 00:00:00+01:00 74.8
2017-11-30 00:00:00+01:00 30.4
2017-12-31 00:00:00+01:00 7.2
2018-01-31 00:00:00+01:00 9.4
Freq: M, Name: Yield (kWh), dtype: float64
我可以通过一些天真的循环轻松实现这一点,但我确信大熊猫必须在这里隐藏一些聪明的技巧。有人能指出我有效的解决方案吗?
非常感谢!
答案 0 :(得分:3)
您可以使用pivot
:
df = pd.pivot(index=df.index.strftime('%b'),
columns=df.index.year,
values=df['Last updated']).fillna(0).reindex(cats)
print (df)
2017 2018
Jan 24.1 9.4
Feb 44.8 0.0
Mar 140.1 0.0
Apr 168.7 0.0
May 194.4 0.0
Jun 214.7 0.0
Jul 204.6 0.0
Aug 159.5 0.0
Sep 117.3 0.0
Oct 74.8 0.0
Nov 30.4 0.0
Dec 7.2 0.0
另一个更通用的解决方案,如果需要,Last updated
的汇总值与groupby
按strftime
和year
生成的unstack
汇总,则汇总sum
(或{{ 1}}如有必要),请按reindex
重新整理ordered categorical:
mean
使用Docs进行正确排序的解决方案:
df = (df.groupby([df.index.strftime('%b'), df.index.year])['Last updated']
.sum().unstack(fill_value=0)
.reindex(cats))
print (df)
2017 2018
Jan 24.1 9.4
Feb 44.8 0.0
Mar 140.1 0.0
Apr 168.7 0.0
May 194.4 0.0
Jun 214.7 0.0
Jul 204.6 0.0
Aug 159.5 0.0
Sep 117.3 0.0
Oct 74.8 0.0
Nov 30.4 0.0
Dec 7.2 0.0