2016-07-15 5 views
2

600 열 (df1)의 팬더 데이터 프레임이 있고 각 열의 값을 6 그룹으로 합하고 싶습니다. 즉, 새로운 데이터 프레임을 생성하고 싶습니다. (df2)는 100 개의 열을 가지며, 각 열은 입력 데이터 프레임의 6 개 열 합계입니다. 예를 들어, df2의 첫 번째 열은 df1의 처음 6 개 열의 합계가됩니다 (행을 분리하여 유지).팬더 데이터 프레임 내 열 그룹 합계

 A B C D E F G H I J ... 
0  9 6 3 4 7 7 6 0 5 2 ...  
1  8 0 6 6 0 5 6 5 8 7 ...   
2  9 0 7 2 9 5 3 2 1 7 ...    
3  5 2 9 6 7 0 3 8 5 0 ...    
4  7 1 0 7 4 0 2 0 5 8 ...  
5  0 9 2 0 4 9 5 7 6 2 ...  

내가 할 DF2의 첫 번째 열을 원할 것 :

A G ... 
0 36 
1 25 
2 32 
3 29 
4 19 
5 24 
나는 또한 사용하고있는 dataframe은 (단지 하나의 문자로 표현 여기) 각 열 이름에 대한 문자열 값 DF1 들어

있다

각 행은 해당 행의 처음 6 개 열의 합계입니다. 다음 열은 다음 여섯 개 열의 합계가되며, 열 이름은 각 6 세트의 첫 번째 열 이름이됩니다. (첫 번째 열 이름은 첫 번째 열 이름이고 두 번째 열 이름은 일곱 번째 열 이름입니다. 열 등)

정확한 열을 합산하기 위해 열 색인을 사용해 보았지만 합계를 관련 이름을 가진 새로운 열에 저장하는 방법을 찾는 데 문제가 있습니다.

이러한 열을 생성하고 열 이름을 df에서 df2로 가져 오는 pythonic 방법이 있습니까?

답변

2

할 수 있습니다 df.columns //6sum가 만든 그룹과 열 (axis=1)에 의해 groupby :

print (df) 
    0 1 2 3 4 5 6 7 8 9 10 11 12 13 
0 9 6 3 4 7 7 6 0 5 2 2 3 7 2 
1 8 0 6 6 0 5 6 5 8 7 9 5 5 1 
2 9 0 7 2 9 5 3 2 1 7 5 9 6 6 
3 5 2 9 6 7 0 3 8 5 0 8 8 9 9 
4 7 1 0 7 4 0 2 0 5 8 2 4 4 1 
5 0 9 2 0 4 9 5 7 6 2 7 1 5 3 

#if values of columns are not int 
#df.columns = df.columns.astype(int) 
print (df.columns // 6) 
Int64Index([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2], dtype='int64') 

print (df.groupby(df.columns // 6, axis=1).sum()) 
    0 1 2 
0 36 18 9 
1 25 40 6 
2 32 27 12 
3 29 32 18 
4 19 21 5 
5 24 28 8 

편집 :

당신은 rangeshape에서 Index이 (컬럼의 길이를 얻을)를 생성하고 사용할 수 있습니다 in groupby :

idx = pd.Index(range(df.shape[1])) // 6 
print (idx) 
Int64Index([0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2], dtype='int64') 

df1 = df.groupby(idx, axis=1).sum() 
#if need rename columns by categories 
df1.columns = df.columns[::6] 
print (df1) 
    A G M 
0 36 18 9 
1 25 40 6 
2 32 27 12 
3 29 32 18 
4 19 21 5 
5 24 28 8 
+0

이 솔루션의 문제점은 열 이름이 문자열 (범주 이름)이므로 바닥 나누기 연산자를 사용하여 그룹을 구분할 수 없다고 생각하는 것입니다. 내 게시물을 편집하여보다 명확하게 처리 할 것입니다. – Nizag

+0

편집이 완료되었습니다! 필자는 pd.Index 함수와 데이터 프레임 모양 함수를 살펴보고이 물건이 어떻게 작동하는지 더 잘 이해할 수있게되었습니다. 정말 고마워! – Nizag

+0

다행히 도울 수 있습니다. 범주 이름에 새 열의 이름을 바꾸는 기능도 추가했습니다. – jezrael