2016-09-09 5 views
0

I는 Z-득점이 같은 다른 A 열에 dataframe에 열 삽입 할 수추가 그룹화-하여 팬더 dataframe에 zscore 열

[1] df.insert(<loc>, column='ZofA', value=(df['A']-df['A'].mean())/df['A'].std()) 

는 I 2로 그룹화 열 단순 환원을 할 수 이 같은 다른 열 :

[2] df.groupby(['C1', 'C2'])['A'].mean() 

나는의 단순 평균() 함수를 대체하기 위해 노력 [2]에서 zscore 기능 [1]하지만 .apply에 포함, 그것을 할 방법을 알아낼 수 없었다 - 예. 이것은 실패합니다 :

그래서 첫 번째 문제는 그룹화를 통해 zscore 열을 만드는 방법을 분명히 알지 못합니다.

두 번째 문제점은 (1) 다른 열 ('A')에서 z- 점수를 보유하는 데이터 프레임 ('ZofA')에 새 열을 삽입하고 (2) 해당 z 스코어를 두 개의 다른 열 ('C1', 'C2')에 의해 정의 된 그룹 내에서 계산됩니다. 그리고 (3)이 모든 것을 하나의 df.insert() 문에서 수행하고 싶습니다. 난 그냥 내 괄호와 괄호를 엉망으로 만들어 버리는거야, 아니면 하나의 성명서에서 너무 많이하려고하는거야? 감사!

+1

책으로 보겠습니다. http://pandas.pydata.org/pandas-docs/stable/groupby.html 문서에 정확한 예가 나와 있습니다. – Boud

+0

대답으로 게시하고 올바른 것으로 표시하십시오. 당신의 문제를 해결했습니다. – ayhan

답변

3

문서 포인터를 보내 주셔서 감사합니다. 호기심이 많은 사람은 솔루션을 게시 할 것이라고 생각했습니다. 우선, 람다로 zscore 계산 입력 :

zscore = lambda x: (x - x.mean())/x.std() 

마법 성분 .transform이다. 다음과 같이 insert 문을 작성하십시오.

df.insert(<loc>, 'ZofA', df.groupby(['C1', 'C2'])['A'].transform(zscore)) 

실제로 솔루션은 "그룹화 : 분할 적용 조합"문서에 있습니다. "변환"섹션의 절반 정도 아래로 스크롤하면됩니다. 나는 날짜 키에 관한 내용을 무시하고 groupby 문에 직접 내 그룹화 열을 연결했습니다.

관련 문제