2016-09-22 4 views
0

데이터를 구조화하고 처리하는 데 팬더를 사용하고 있습니다. 이 내 DataFrame입니다 :그룹 위로 반복 팬더 데이터 프레임 및 합계/합계

DataFrame

그리고 이것은이 DataFrame 얻기 위해 저를 활성화하는 코드입니다 :

(data[['time_bucket', 'beginning_time', 'bitrate', 2, 3]].groupby(['time_bucket', 'beginning_time', 2, 3])).aggregate(np.mean) 

가 지금은 합 (이상적으로는, 합계 수를 갖고 싶어를)는 같은 time_bucket에 그룹화 된 '비트 전송률'입니다. 예를 들어 첫 번째 time_bucket ((2016-07-08 02:00:00, 2016-07-08 02:05:00)의 경우 'bitrate'에 대한 총계는 93750000이고 개수는 25이어야합니다. .

I했던이 :

data[['time_bucket', 'bitrate']].groupby(['time_bucket']).agg(['sum', 'count']) 

그리고 이것은 결과입니다

enter image description here

하지만 정말 하나 DataFrame에 내 모든 데이터를 갖고 싶어

내가 할 수 있습니다. 간단한 것을해라. time_bucket을 넘어서서 모든 비트 전송률의 합을 계산하는 함수를 적용 하시겠습니까? 아이디어가 있으십니까? 고마워 !

+0

질문에 필요한 데이터 프레임 (또는 그 근사치)을 제공하는 작은 코드 스 니펫을 제공하십시오. 이 이미지는 파이썬에로드 할 수 없습니다. –

답변

1

나는 이 필요하다고 생각하지만 indexes은 모두 DataFrames이므로 같은 레벨이 필요하므로 reset_index을 사용하십시오.

data = pd.DataFrame({'A':[1,1,1,1,1,1], 
        'B':[4,4,4,5,5,5], 
        'C':[3,3,3,1,1,1], 
        'D':[1,3,1,3,1,3], 
        'E':[5,3,6,5,7,1]}) 

print (data) 
    A B C D E 
0 1 4 3 1 5 
1 1 4 3 3 3 
2 1 4 3 1 6 
3 1 5 1 3 5 
4 1 5 1 1 7 
5 1 5 1 3 1 
df1 = data[['A', 'B', 'C', 'D','E']].groupby(['A', 'B', 'C', 'D']).aggregate(np.mean) 
print (df1) 
      E 
A B C D  
1 4 3 1 5.5 
     3 3.0 
    5 1 1 7.0 
     3 3.0 

df2 = data[['A', 'C']].groupby(['A'])['C'].agg(['sum', 'count']) 
print (df2) 
    sum count 
A    
1 12  6 

print (pd.merge(df1.reset_index(['B','C','D']), df2, left_index=True, right_index=True) 
     .set_index(['B','C','D'], append=True)) 

      E sum count 
A B C D     
1 4 3 1 5.5 12  6 
     3 3.0 12  6 
    5 1 1 7.0 12  6 
     3 3.0 12  6 

내가 df1에서 출력을 얻을 수있는 또 다른 해결책을 시도하지만 올바른 데이터를 얻는 것은 불가능하므로이 집계 : 마지막 set_index에 의해 Multiindex 원래 얻는다. 합계 레벨이 C 인 경우 12 대신 8이 표시됩니다.

+0

내가 도와 줄 수있어? :) http://stackoverflow.com/questions/39691671/resampling-timeseries-with-a-given-timedelta – DataAddicted

+0

예, 제 솔루션을 참조하십시오. – jezrael