2014-10-03 5 views
0

행에 이름, 유형 및 SLA 열이있는 데이터 프레임이 있습니다. SLA C 럼은 1, 2 또는 3의 숫자 값입니다. SLA C 럼은 이름이 아닌 유형에 고유합니다.새 Pandas Groupby API 변경

이름 값별로 그룹화하고 동일한 이름을 가진 모든 행에 대해 동일한 숫자 값을 적용하는 새 열을 만드는 코드가 있습니다. 나는. 주어진 이름에 대한 SLA 값이 모두 2이면 모두 2가됩니다. 모두 3이면 3을 얻습니다. 그렇지 않으면 (값의 조합이있는 경우 모든 값이 2 이상일 경우) 모두 기능 2.

df['SLA_Norm'] = df.groupby('Name').apply(assignSLA) 

:

def assignSLA(df): 
    a = pd.Series(df['SLA'], df.index) 
    m = a.mean() 
    if m == 1.0: 
     n = [1] 
     n = n*len(a) 
     return pd.Series(n, df.index) 
    elif m == 3.0: 
     n = [3] 
     n = n*len(a) 
     return pd.Series(n, df.index) 
    else: 
     n = [2] 
     n = n*len(a) 
     return pd.Series(n, df.index) 

최근 GROUPBY API를,이 기능 바꿈을 업데이트 팬더 라이브러리를 업데이트 한 후. 그러나, 나는 이유를 알 수 없다. 누구든지 팬더의 새로운 groupby 기능이이 기능을 깨뜨릴 수있는 이유를 알고 있습니까?

친절하게 감사드립니다.

편집 :

Name Type SLA  SLA_Norm 
Foo  A  1  NaN 
Foo  B  2  NaN 
Foo  C  3  NaN 
Buzz A  1  NaN 
Buzz A  1  NaN 
Buzz A  1  NaN 
Buzz A  1  NaN 
Buzz A  1  NaN 
Bar  C  3  NaN 
Bar  C  3  NaN 
Bar  C  3  NaN 
: 판다 14.0로,

Name Type SLA  SLA_Norm 
Foo  A  1  2 
Foo  B  2  2 
Foo  C  3  2 
Buzz A  1  1 
Buzz A  1  1 
Buzz A  1  1 
Buzz A  1  1 
Buzz A  1  1 
Bar  C  3  3 
Bar  C  3  3 
Bar  C  3  3 

지금은 얻을 : 판다 13.0로, 내가 가져 오는 데 사용

Name Type SLA 
Foo  A  1  
Foo  B  2  
Foo  C  3  
Buzz A  1  
Buzz A  1  
Buzz A  1  
Buzz A  1  
Buzz A  1  
Bar  C  3  
Bar  C  3  
Bar  C  3 

:

그래서 DF로 시작

+0

당신이했을 사용할 수 있습니다 ...이 코드를 사용해보십시오, 어떤 버전 당신은했다 on, 그리고 당신이 바꾼 버전. API는 이전 버전과 호환됩니다. 따라서 무엇이 '깨는'것인지 확실하지 않습니다. – Jeff

+0

질문을 해당 정보로 업데이트합니다. 조심스럽게이 기능은 수백 일 동안 연속적으로 성공적으로 실행 된 후 팬더를 업데이트하자마자 작동을 멈췄습니다. – humbug

+0

이름을 편집하여 '깨는'언어를 없애고 내 직업을 가능하게하는 라이브러리를 간과하지 않으려 고합니다. – humbug

답변

0

당신은 h를 그룹별로 작성한 판다를 사용하여 원래 프레임과 병합하십시오.

means = df.groupby('Name')[['SLA']].mean() 
df = pd.merge(df,means,left_on='Name',right_index=True,suffixes=("","_Norm")) 

편집

당신이 당신의 _Norm 값에 원하는 내용에 따라 당신은 또한 완벽한 시작 프레임을 게시 .apply(function)

+0

이것은 .astype (int) 없이는 완벽합니다. 감사. – humbug

+1

정상적인 작업은 원래의 df와 일치하는 색인을 가진 객체를 반환하기 위해 groupby에서'transform'을 수행하는 것입니다 : http://pandas.pydata.org/pandas-docs/stable/groupby. html # transformation – EdChum

+0

위의 기능이 작동을 멈추게하는 이유는 무엇입니까? – humbug

관련 문제