我正在尝试绘制已按某些日期范围分箱的数据。
比如说我有以下数据框:
dates = pd.date_range(start=pd.datetime(2013, 6, 1), periods=50, freq='D')
df = pd.DataFrame(np.random.normal(10, 3, 50), columns=['x'], index=dates)
df[:3]
x
2013-06-01 9.819422
2013-06-02 3.659629
2013-06-03 14.862231
我想按照3周的间隔对日期进行分组并绘制数据,这给了我正在寻找的平均值,
df.resample('3w', how='mean')
x
2013-06-02 11.424715
2013-06-23 9.443888
2013-07-14 8.572851
2013-08-04 9.873879
但我想保留所有数据,以便我可以使用seaborn
中的箱图或使用matplotlib
包含标准错误。我完全坚持如何在没有明确定义范围的情况下实现这一点(这与我正在使用的实际数据帧无法实现)。似乎必须有一种相当简单的方法在pandas中执行此操作,因此输出将类似于:
x week
2013-06-01 9.819422 1
2013-06-02 3.659629 1
2013-06-03 14.862231 1
其中week
是表示分箱数据的分类变量。任何想法将不胜感激。
答案 0 :(得分:2)
也许您可以使用TimeGrouper。
df.groupby(pd.TimeGrouper('3w', how=np.mean)).describe().unstack()
x
count mean std min 25% 50% 75% max
2013-06-02 2 10.864835 3.794379 8.181803 9.523319 10.864835 12.206350 13.547866
2013-06-23 21 9.888556 3.452331 3.503944 7.838625 9.739525 12.403285 16.031644
2013-07-14 21 10.475142 2.687320 6.605619 8.399518 11.209683 11.818895 16.265771
2013-08-04 6 9.471931 3.196345 5.492205 8.122607 8.502217 10.901065 14.638198
>>> g = df.groupby(pd.TimeGrouper('3w', how=np.mean)).boxplot()
将期间开始日期(作为字符串)添加到原始数据:
df = pd.DataFrame(np.random.normal(10, 3, 50), columns=['x'], index=dates)
tg = df.groupby(pd.TimeGrouper('3W', closed='left'))
df['period'] = None
for p, idx in tg.indices.iteritems():
df.ix[idx, 'period'] = p.strftime('%Y-%m-%d')
>>> df.head()
x period
2013-06-01 7.972202 2013-06-16
2013-06-02 12.184312 2013-06-16
2013-06-03 6.884374 2013-06-16
2013-06-04 8.414091 2013-06-16
2013-06-05 12.368407 2013-06-16
答案 1 :(得分:1)