2017-05-08 8 views
0

나는 멀티 인덱스가있는 팬더 데이터 프레임을 가지고 있습니다. 레벨 0은 '스트레인'이고 레벨 1은 'JGI 라이브러리'입니다. 각 'Strain'에는 여러 개의 'JGI 라이브러리'열이 있습니다. 두 개의 다른 변형을 비교하기 위해 t- 테스트를 적용하기 위해 람다 함수를 사용하고 싶습니다. 문제를 해결하기 위해 필자는 .iloc [0] 명령을 사용하여 데이터 프레임 한 행을 가져 왔습니다.팬더 람다 함수 그룹에 액세스하기

row = pvalDf.iloc[0] 
parent = 'LL1004' 
child = 'LL345' 
ttest_ind(row.groupby(level='Strain').get_group(parent), row.groupby(level='Strain').get_group(child))[1] 

예상대로 작동합니다. 지금은

parent = 'LL1004' 
child = 'LL345' 
pvalDf = countsDf4.apply(lambda row: ttest_ind(row.groupby(level='Strain').get_group(parent), row.groupby(level='Strain').get_group(child))[1]) 

가 지금은 ValueError를 "라는 오류 메시지가 얻을 내 모든 dataframe에 적용하려고 : ('레벨 이름의 변형이 인덱스의 이름이 아닌'을 '지수 (LL1004, BCHAC에서 발생) ') "

'LL1004 '는'변형 '이지만 팬더는이 사실을 인식하지 못합니다. Multiindex가 람다 함수에 올바르게 전달되지 않은 것 같습니다. .iloc [0]을 사용하는 것보다 람다 함수 문제를 해결할 더 좋은 방법이 있습니까?

나는 나의 Jupyter 노트북의 사본을 넣어 엑셀은 Github에서의 countsDf4의 dataframe 더 간단하게 대해 어떻게 https://github.com/danolson1/pandas_ttest

감사합니다, 댄

답변

0

파일 :

pvalDf = countsDf4.apply(lambda row: ttest_ind(row[parent], row[child]), axis=1) 

나 '를 노트북에서 테스트 해 보았습니다.

기본적으로 DataFrame.apply()은 각 행이 아니라 각 에 기능을 적용합니다. 따라서 기본 동작을 무시하고 함수를 행별로 적용하려면 axis=1 매개 변수를 지정해야합니다.

row[x]으로 단순히 열 그룹을 색인 할 수있는 경우에도 row.groupby(level='Strain').get_group(x)을 사용할 이유가 없습니다. :)

+0

'축 = 1'이 문제를 해결했습니다. 그리고 다른 코멘트도 주셔서 감사합니다. –