2014-03-27 3 views
3

저는 파이썬과 팬더에 대해 상당히 익숙하며 간단한 분할 - 참여 - 적용 방법을 알아 내려고합니다. 내가 겪고있는 문제는 팬더 (Pandas)의 적용 기능에서 돌아 오는 모든 데이터 프레임의 맨 위에 빈 행이 생기고 그 이유가 확실하지 않다는 것입니다. 아무도 설명 할 수 있을까요?팬더를 사용한 후에 데이터 프레임에 빈 행이 표시되는 이유는 무엇입니까?

  mean total 
flavour     <--- Why are there spaces here? 
lemon  7.5  2 
orange 4.5  2 

[2 rows x 2 columns] 

print(sorbet)와 비교해 : : 다음 print(sorted_vals)을한다면 나는이 출력을 얻을

sorbet = pd.DataFrame({ 
    'flavour': ['orange', 'orange', 'lemon', 'lemon'], 
    'niceosity' : [4, 5, 7, 8]}) 

def calc_vals(df, target) : 
    return pd.Series({'total' : df[target].count(), 'mean' : df[target].mean()}) 

sorbet_grouped = sorbet.groupby('flavour') 
sorbet_vals = sorbet_grouped.apply(calc_vals, target='niceosity') 

:

다음, 나의 실제 코드 문제를 보여줍니다 최소한의 예입니다

flavour niceosity  <--- Note how column names line up 
0 orange   4 
1 orange   5 
2 lemon   7 
3 lemon   8 

[4 rows x 2 columns] 

이 불일치의 원인과 원인 고칠 수 있을까요?

답변

9

groupby/apply 작업 반환 값은 명명 된 인덱스가있는 새 DataFrame입니다. 이름은 원래 DataFrame이 그룹화 된 열 이름에 해당합니다.

이름이 색인 위에 표시됩니다. 당신이 None으로 재설정하면, 해당 행이 사라 다음 name 유용

In [155]: sorbet_vals.index.name = None 

In [156]: sorbet_vals 
Out[156]: 
     mean total 
lemon 7.5  2 
orange 4.5  2 

[2 rows x 2 columns] 

하는 것으로 - 정말를 제거하지 않는 것이 좋습니다. 이름을 사용하면 단순히 숫자가 아닌 이름으로 해당 색인을 참조 할 수 있습니다. 당신이 열로 인덱스를하고자하는 경우


, reset_index를 사용하십시오 영업 이익은`) (이 또는 .reset_index '의 2 × 결과를 원하는

In [209]: sorbet_vals.reset_index(inplace=True); sorbet_vals 
Out[209]: 
    flavour mean total 
0 lemon 7.5  2 
1 orange 4.5  2 

[2 rows x 3 columns] 
+0

확실하지합니다. – DSM

+0

아, 그래, 그 이유는 groupby/apply 작업 _replaces_ 그룹화 값에 의한 색인 작성과 함께 일반적인 색인 생성입니까? 그 맞습니까? –

+0

예, groupby/apply의 결과는 이름이 지정된 인덱스가있는 새로운 DataFrame이며 이름은 원래 DataFrame이 그룹화 된 열 이름과 일치합니다. – unutbu

관련 문제