2017-04-12 1 views
2

지금 몇 시간 팬더를 가지고 놀았는데, 테이블에 행 평균을 구성하는 추가 열을 추가하는 더 빠른 방법이 있는지 궁금합니다. 평균을 포함하는 새 목록을 만들고 데이터 프레임에 통합하려고합니다.팬더와 numpy를 사용하는 테이블의 평균 인덱스

import numpy as np 
import pandas as pd 
userdata={"A":[2,5],"B":[4,6]} 
tab=pd.DataFrame((userdata), columns=["A","B"]) 
lst=[np.mean([tab.loc[i,"A"],tab.loc[i,"B"]]) for i in range(len(tab.index))] 
tab["Average of A and B"]=pd.DataFrame(lst) 
tab 

답변

3

assigndf.mean(1) 시도 :

이 내 코드입니다. df.mean(1)은 팬더에게 axis=1 (행)의 평균을 계산하도록 지시합니다. axis=0이 기본값입니다.

df.assign(Mean=df.mean(1)) 

이렇게하면 열이 추가 된 df 사본이 생성됩니다.

는 기존 dataframe

df['Mean'] = df.mean(1) 
을 변경하려면

tab.assign(Mean=tab.mean(1)) 

    A B Mean 
0 2 4 3.0 
1 5 6 5.5 
+0

당신을 감사 굿나잇! 훨씬 간단 해! – user2822693

2

NumPy와 솔루션이 될 것이다 데모의 성능을 위해 기본 배열 데이터로 작업하기 -

,519,882,662,153

tab['average'] = tab[['A','B']].values.mean(1) 

런타임 테스트 - -210

특정 'A' 같은 열 및 'B'를 선택합니다

In [41]: tab = pd.DataFrame(np.random.randint(0,9,(10000,10))) 

# @piRSquared's soln 
In [42]: %timeit tab.assign(Mean=tab.mean(1)) 
1000 loops, best of 3: 615 µs per loop 

In [43]: tab = pd.DataFrame(np.random.randint(0,9,(10000,10))) 

In [44]: %timeit tab['average'] = tab.values.mean(1) 
1000 loops, best of 3: 297 µs per loop 


In [37]: tab = pd.DataFrame(np.random.randint(0,9,(10000,100))) 

# @piRSquared's soln 
In [38]: %timeit tab.assign(Mean=tab.mean(1)) 
100 loops, best of 3: 4.71 ms per loop 

In [39]: tab = pd.DataFrame(np.random.randint(0,9,(10000,100))) 

In [40]: %timeit tab['average'] = tab.values.mean(1) 
100 loops, best of 3: 3.6 ms per loop