2014-11-18 3 views
1

groupby 작업의 결과에 적용을 사용하려고 할 때 문제가 있습니다. 팬더 : 적용 할 급식 색인 값

나는 다음과 같은 2 dataframes 있습니다

>>> df2 = df2.groupby(['id2', 'id1']).sum() 
>>> df2.head() 
       value 
id2 id1    
81 1701071 49.94 
88 1701071 759.22 
    2001011 73.26 
    2001382 199.70 
    2003071 25.00 

을 그리고 내가 지금 적용 사용하고 싶습니다,하지만 난 공급해야합니다

>>> df1.head() 
     col1 col2 col3 
id1      
2001991 0.0  0  0 
1501102 3.0  1  1 
1701072 0.0  0  0 
2001022 0.1 20 50 
2001212 3.0  2  4 
>>> df2.head() 
    id2 value  id1 
0 24400 6.28 2001022 
1 24400 3.40 2001011 
2 24037 12.30 2002011 
3 24037 3.00 2001382 
4 24037 20.00 1701071 

는 GROUPBY과 합이 DF2하는 내가 먼저 않았다을 index의 일부인 id1을 사용하므로 다음을 시도 할 때 오류가 발생합니다.

df2['new'] = df2.apply(lambda row: min(row['value'], df1.loc[row['id1'], 'col1']), axis=1) 

올바른 정보 이 일을하는 방법?

[BTW, 하나의 테이블에서 df1과 df2를 병합하려고 했으므로 (df2의 각 행에 df1의 col1, col2 및 col3에 해당하는 필드가 있음) 그러나 groupby 및 sum) 당신이 인덱스를 재설정 할 수 있습니다

+2

색인'df2.reset_index (level = 'id1'')를 재설정 할 수 있으며 일반 열이됩니다. 또는 groupby 호출에'as_index = False'를 제공하십시오. – joris

+0

@joris 저는 이것이 정말 좋은 대답이라고 생각합니다. 대답 상자에 넣을만한 가치가 있다고 생각합니다. –

+0

@joris : 감사합니다. as_index = 거짓은 나를위한 좋은 해결책입니다. (당신이 코멘트로 대답했기 때문에 나는 당신을 투표 할 수 없습니다) – Armando

답변

0

COL1, COL2와 COL3 값을 (내가 원하지 않는)] 집계, 그것은 보통 열 것 :

df2.reset_index(level='id1') 

또는 GROUPBY 호출에 as_index=False을 제공 :

df2.groupby(['id2', 'id1'], as_index=False).sum()