2013-08-09 9 views
2

주 단위로 데이터 프레임을 재구성하여 특정 주를 쉽게 볼 수 있지만 월요일 - 월요일, 화요일 + 화요일 등과 같이 합산 된 주간도 함께 볼 수 있습니다.Pandas Dataframe이 주 단위로 분할되었습니다.

설명서에서 접근 방법을 살펴 보았지만 나에게 적합한 솔루션을 찾을 수 없었습니다. 내 데이터는 1 분의 해상도와 4 개월의 지속 시간을 가지고 있으며 일부 시리즈에서는 일부 데이터가 누락되었습니다. 나는 당신의 목표는 여기에 무엇 완전히 확실하지 않다

def week_reshaping(df): 
    # Define constant for offsetting the loop 
    offset = pd.DateOffset(days=7) 

    # Number of weeks within the df 
    weeks = (df.index[-1] - df.index[0]).days // 7 

    d_datetime = df.index[0] 
    df_week = pd.DataFrame() 
    for week in range(1, weeks + 1): 
     start = df.index.searchsorted(d_datetime) 
     end = df.index.searchsorted(offset + d_datetime) 

     # Assign this somehow 
     df.ix[start:end] 

     d_datetime += offset 

    return df_week 

답변

5

,하지만 당신은 확실히 (훨씬 빠를 것이다) 대신 루프에 대한보다 groupby 사용을 고려해야합니다 :

현재 내가 좋아하는 뭔가 올라와있다 .

당신은합니다 (DatetimeIndex에서) 주를 GROUPBY 수 있습니다 이러한에서 파생 된

In [5]: df.groupby(df.index.dayofweek).sum() 
Out[5]: 
      0 
0 1.268307 
1 0.387322 
2 1.416948 
3 -0.380844 
4 1.464068 
5 0.030965 
6 0.205453 

이상의 복잡한 배열 :

In [1]: rng = pd.date_range('2013', freq='D', periods=10) 

In [2]: df = pd.DataFrame(np.random.randn(10), rng) 

In [3]: df.index.week 
Out[3]: array([32, 32, 32, 33, 33, 33, 33, 33, 33, 33], dtype=int32) 

In [4]: df.groupby(df.index.week).sum() 
Out[4]: 
      0 
32 3.600673 
33 0.791545 

마찬가지로, (주의) 일을 GROUPBY 수 있습니다. ..

applyapply 다른 기능을 사용하면 원하는 결과를 얻을 수 있습니다.

+0

다른 접근 방법이 있다고 생각되는 것으로 추정됩니다. 글쎄, 내 최종 목표는 하루, 주 및 월 데이터 패턴의 막대 그래프를 만드는 것입니다. – aagaard

+1

카운트 그룹 방법이 도움이 될 것 같아요. ... 또는 value_counts 즉, 'pd.value_count (df.index.dayofweek)'입니다. –

+0

흥미 롭습니다. 그러나 특정 일 또는 주에 얼마나 많은 항목이 있는지를 찾는 것이 아니라 일별, 주별 또는 월별 평균 또는 합계와 같습니다. – aagaard

관련 문제