2013-06-19 25 views
6

Bir zamanlama için haftada bir gün kutusu kümesi oluşturmaya çalışıyorum (örneğin 5 dakikalık sıcaklık gözlemleri).Bir Pandalar zaman çizelgesinden günlük olarak oluşturulma yollarının en iyi yolu

Kodum:

# ts is our timeseries 
ts = df.SomeColumn 

dow_map = {} 
days = ['MON','TUE','WED','THU','FRI','SAT','SUN'] 
dow_idx = ts.index.dayofweek 

i = 0 
for d in days: 
    dow_map[d] = ts[dow_idx == i] 
    i = i + 1 

df = pd.DataFrame(dow_map) 
df.boxplot() 

Sonuçlar:

--------------------------------------------------------------------------- 
Exception         Traceback (most recent call last) 
<ipython-input-898-6070c45e4c4b> in <module>() 
    41  i = i + 1 
    42 
---> 43 df = pd.DataFrame(dow_map) 
    44 df.boxplot() 
... 
Exception: Reindexing only valid with uniquely valued Index objects 

Ben her gün-of-hafta DataFrames oluşturarak succcess bulup vermedi sonra concat-ing nihai DataFrame bunları, ancak Bu ... verimsiz görünmektedir

+4

, Hiç kendine bulursan i + = 1 python, muhtemelen yanlış (bu durumda [ 'enumerate'] (http kullanabilir yapıyoruz: // docs .python.org/2/library/functions.html # enumerate)) –

+0

Bu DataFrame'in nasıl görünmesini bekliyorsunuz? Çok seyrek olurdu gibi görünüyor ... –

cevap

9

1 veri çerçevesini oluşturma ve haftanın günleri almak için hafta içi yöntemi kullanın:

import pandas as pd 
import numpy.random as random 
n=1000 
df = pd.DataFrame(random.randn(n), pd.date_range('2010-01-01', periods=n), columns=["data"]) 
df['Dates'] = df.index 
df['week_days'] =df.index.weekday 
df 

şimdi bu çizelgeyi pandığınızda, week_days sütunlar olacak (günlerin dize biçimlerini de değiştirebilir, ancak sizin için bırakabilirsiniz).

x =df.pivot(index='Dates', columns='week_days', values='data') 
x.boxplot() 
Kenara

enter image description here

+0

Harika bir çözüm. Txs! –

1
import locale, calendar 
# for example pl_PL 
locale.setlocale(locale.LC_ALL, 'pl_PL.UTF-8') 
x = x.rename_axis(lambda x: calendar.day_abbr[x].capitalize())