2017-01-17 164 views
0

我有一个名为“完整”的日期格式列中的数据框:2017年1月16日熊猫,按日期范围分组

我有一个跨越过去三个月许多行,我想将我的数据框分成长达一周的增量,这样我可以稍后制作一个图表,显示每周特定项目的数量,并可视化它的上升或下降。

通常,当我不知道答案时,我手动去了很长的路。在这种情况下,我会说,例如,

weeknumber = 1 
    for day in range(earliest, latest, 8): 
     df[df.complete == day].week = weeknumber 
     weeknumber += 1 

正如你所看到的,我很担心究竟是如何做到这一点很困惑,因为我不能确定的正是我想要的,直到我可以玩一些首先输出并查看甚至可用的工作选项。我搜索了其他的代码,比如date_range(),但是我的周数只有0,并且不知道我的代码是错误的还是我的日期格式,或者如果我使用的方法是错误的等等。其他人说这个groupby不会工作等等等等。

noob的任何帮助?

回答

2

以数据框df为例。你会想通过做df.complete = pd.to_datetime(df.complete)确保你的complete列是datetime

tidx = pd.date_range('2016-03-31', periods=95) 
df = pd.DataFrame(dict(complete=tidx, A=np.arange(len(tidx)))) 

df.head() 

    A complete 
0 0 2016-03-31 
1 1 2016-04-01 
2 2 2016-04-02 
3 3 2016-04-03 
4 4 2016-04-04 

这些是时间两种常用技术分组

  • resample

    • 我们通过一个字符串参数,在这种情况下'W'

      df.resample('W', on='complete').mean() 
      
  • pd.TimeGrouper

    • 类似的想法

      df.set_index('complete').groupby(pd.TimeGrouper('W')).sum()