2012-08-09 4 views
7

저는 뇌를 pandas 데이터 구조로 감싸고 분노로 사용하려고합니다. 나는 groupby 연산 결과가 팬더 시리즈 객체라는 것을 알아 냈습니다. 하지만 결과 시리즈를 사용하는 방법을 알 수는 없습니다.소스 데이터 프레임에 계층 적 인덱스가있는 팬더 시리즈에 가입

1) 결과 다시 초기 DataFrame

2)에 "가입"계층 인덱스에 따라 결과 시리즈에서 특정 값을 선택합니다 특히, 나는이 일을하고 싶습니다. 이 같은

import pandas 
df = pandas.DataFrame({'group1': ['a','a','a','b','b','b'], 
         'group2': ['c','c','d','d','d','e'], 
         'value1': [1.1,2,3,4,5,6], 
         'value2': [7.1,8,9,10,11,12] 
}) 
dfGrouped = df.groupby(["group1", "group2"] , sort=True) 

## toy function, obviously not my real function 
def fun(x): return mean(x**2) 

results = dfGrouped.apply(lambda x: fun(x.value1)) 

그래서 결과 시리즈 (결과) 같습니다 :

는 다음 작업을 장난감 예제

group1 group2 
a  c   2.605 
     d   9.000 
b  d   20.500 
     e   36.000 

의미가있다. 하지만이 방법은 다음과 같습니다

1) 하나의 값을 선택 원래 DataFrame df

2)이 다시 참여할 경우, 말, 그룹 1 == 'B'& 그룹 2 == 'D'

답변

8

그룹 1 == 'B'& 그룹 2 == 'D'1 : 돌아온다 동안 나는 # 2에 대한 답을 발견했다.

In [9]: df 
Out[9]: 
    group1 group2 value1 value2 
0  a  c  1.1  7.1 
1  a  c  2.0  8.0 
2  a  d  3.0  9.0 
3  b  d  4.0 10.0 
4  b  d  5.0 11.0 
5  b  e  6.0 12.0 

In [10]: results 
Out[10]: 
group1 group2 
a  c   2.605 
     d   9.000 
b  d   20.500 
     e   36.000 

In [11]: df.set_index(['group1', 'group2'], inplace=True)['results'] = results 

In [12]: df 
Out[12]: 
       value1 value2 results 
group1 group2 
a  c   1.1  7.1 2.605 
     c   2.0  8.0 2.605 
     d   3.0  9.0 9.000 
b  d   4.0 10.0 20.500 
     d   5.0 11.0 20.500 
     e   6.0 12.0 36.000 

In [13]: df.reset_index() 
Out[13]: 
    group1 group2 value1 value2 results 
0  a  c  1.1  7.1 2.605 
1  a  c  2.0  8.0 2.605 
2  a  d  3.0  9.0 9.000 
3  b  d  4.0 10.0 20.500 
4  b  d  5.0 11.0 20.500 
5  b  e  6.0 12.0 36.000 
+1

정확히 무엇을하려고했는지 보입니다. 인덱스를 설정하는 좋은 예입니다. 그게 어떻게 작동하는지 몰랐다. –

+0

@ wouter-overmeire - 아주 좋네요. 나는 오늘 이것을 고심하고 있었다. – John

+0

@ wouter-overmeire, @ jd-long - 둘 이상의 결과를 DataFrame에 다시 추가해야하는 경우 어떻게 작동합니까? 예를 들어 'def UCL (x) : return mean (x2) + np.std * 2' 그리고'def LCL (x) : return mean (x2) -np.std * 2'는 df로 다시 전달됩니까? 아니면 더 좋은 방법이 있습니까? – John

3

results["b","d"] 나에게 가치를 제공 곳 그래서 # 나머지에 대한