2016-09-04 4 views
0

요일 (1-7), 올해의 주 (1-52), 올해의 달 (1-12)에 대한 값이 인코딩 된 9 개의 열이있는 DataFrame이 있습니다.), 시간 휴지통 (3 시간마다), 급여 일 (0,1) 및 휴일 (0,1) 및 금액 (실수). 시간은 시간대 (time bin)에 위치한다. 15:00는 6 번째 시간 빈에 배치되고 7:34는 3 번째 시간 빈에 배치됩니다.원래 DataFrame을 유지하는 동안 DataFrame Groupby

Day Week Month Time Salary Holiday Amount 
1 5  2  1  0  0  700.0 
1 5  2  1  0  0  800.0 
3 18  5  7  1  0  90.0 

은 기본적으로 I 그룹 내지 제 6 개 칼럼에 의해 데이터가 필요하고 양의 합산 값이 새로운 컬럼을 생성한다. 그러나 원본 데이터 프레임을 유지해야하므로이 금액이 반복됩니다. 따라서 일, 주, 월, 시간, 연봉 및 휴일이 같은 구매 즉, 해당 그룹의 합계 만 합산해야합니다.

Day Week Month Time Salary Holiday Amount Sum 
1 5  2  1  0  0  700.0 1500.0 
1 5  2  1  0  0  800.0 1500.0 
3 18  5  7  1  0  90.0 90.0 

나는 일, 주, 월, 시간, 급여, 휴가 및 합계 금액으로 데이터 프레임을 분류했다.

temp= features.groupby(by=["Day", "Week", "Month", "Time", "Salary", "Holiday"])["Amount"].sum() 

답변

1

the docs으로부터 원래의 데이터 프레임의 크기가 같은 열을 반환 transform을 사용할 수

이 변환 방법은 동일 (동일 크기) 인덱싱 객체를 반환 그룹으로 분류 된 따라서 전달 된 변환 함수 은 그룹 청크와 동일한 크기의 결과를 반환해야합니다.

df['Sum'] = df.groupby(["Day", "Week", "Month", "Time", "Salary", "Holiday"]).transform('sum') 

df  
# Day Week Month Time Salary Holiday Amount Sum 
#0 1 5  2 1  0  0 700 1500 
#1 1 5  2 1  0  0 800 1500 
#2 3 18  5 7  1  0  90 90 
0

임시 인덱스를 재설정 한 다음 그룹화 한 모든 열의 원래 기능 데이터 프레임과 외부 병합을 수행 할 수 있습니다.

result = features.merge(temp.reset_index(), on=["Day", "Week", "Month", "Time", "Salary", "Holiday"]) 
관련 문제