每个时段的列重组pandas定时日期

时间:2018-01-22 14:58:01

标签: python pandas

我有一个很大的数据集,包括多年来每十分钟计时一次的太阳能电池板产量记录。我想得到一个条形图,显示每年这些日志的月总和。

我不知道这是否有意义,所以让我用一个例子来解释。

通过重新采样,我得到了以下数据框:

# othermodule.py
import ticket

usersinput = ticket.value.get()
print usersinput

我认为实现我想要的情节的最佳方法是以某种方式将其转换为带有

的数据框
  • 只包含几个月的索引(这可能是使用DateTimeIndex,还是我只使用1到12的RangeIndex?)
  • 每年的一列(本例中为2016年和2017年)
  • 相应重组的值

所以,例如:

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

我可以通过一些天真的循环轻松实现这一点,但我确信大熊猫必须在这里隐藏一些聪明的技巧。有人能指出我有效的解决方案吗?

非常感谢!

1 个答案:

答案 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的汇总值与groupbystrftimeyear生成的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