2017-12-30 3 views
1

A, B, C 세 개의 열이있는 데이터 프레임이 있습니다. A와 B는 0에서 10까지의 정수 시리즈입니다. A의 고유 값이 색인 인 새로운 데이터 프레임, B의 고유 값은 열이며 각 셀은 Ai, Cj의 교차점에서 얻어진 평균값 C입니다. 있을 것이다 (I, J)의팬더 : 다른 두 열과 관련된 데이터 프레임을 만듭니다.

Cvalues = df.groupby(['A','B'],as_index=False).mean() 

내가 만들고 싶은 dataframe의 위치 :

Cvalues.loc[Cvalues.A==i].loc[Cvalues.B==j].C 

그래서 예를 들면 우리는이 같은 dataframe를 그룹화하는 경우 가장 쉬운 방법은 무엇입니까?

+1

귀하의 설명이 도움이되지 않습니다. 일부 재현 가능한 데이터 샘플을 텍스트 및 예상 출력과 함께 [mcve]로 입력하십시오. 그것은 대단히 도움이 될 것입니다. 특히 올바른 대답을 원한다면 더욱 그렇습니다. –

+0

'Cvalues.unstack()'또는'pivot_table' 또는'crosstab'을 사용할 수있는 것처럼 보입니다. –

답변

1

거의 다 왔어. pivotCvalues 중 하나 일 수도 있고 더 나은 방법은 바로 pivot_table으로 직접 가서 aggfunc이라는 기본 제공 옵션을 사용할 수 있습니다.

df = pd.DataFrame({'A':[2,0,1,1,2,0,1,0], 
        'B':[1,2,1,0,1,2,1,1], 
        'C':[10,20,30,40,50,60,70,80]}) 

권장 한 - 라이너 :

Cvalues = df.groupby(['A','B'],as_index=False).mean() 
res = Cvalues.pivot(index='A', columns='B', values='C') 

왜 귀찮게하지만, 단지의 경우, 당신이 좀 더 컴팩트 만들 수 있습니다 :

res = df.pivot_table(index='A', columns='B', values='C', aggfunc='mean') 

당신의 방법 작업을 만들기
res = df.groupby(['A','B'],as_index=False).mean().pivot(index='A', columns='B', values='C') 

결과는 다음과 같습니다. 두 가지 방법 :

B  0  1  2 
A     
0 NaN 80.0 40.0 
1 40.0 50.0 NaN 
2 NaN 30.0 NaN 

경우, A=2 and B=1의 교차로 : 30.0 = (10 + 50)/2

관련 문제