2017-03-17 4 views
1

에서 누락 된 경우 내가 값이나 무게가 누락 된 경우 내가 계산에서 데이터를 생략 할이가중 평균 - 값이나 무게

>>> import pandas as pd 
>>> import numpy as np 
>>> 
>>> df1 = pd.DataFrame({'value':[10,20,np.nan,40], 
...       'weight':[1,np.nan,3,4]}) 
>>> df1 
    value weight 
0 10.0  1.0 
1 20.0  NaN 
2 NaN  3.0 
3 40.0  4.0 
>>> (df1["value"] * df1["weight"]).sum()/df1["weight"].sum() 
21.25 

과 같은 코드를 가지고 데이터를 생략합니다. 즉(10 * 1 + 40 * 4)/(1 + 4) = 34

과 같은 가중 평균을 원한다면 팬더에서 단일 식을 사용하여 가능하면 도와주세요.

답변

1

먼저 boolean indexing와, 마스크 확인을 위해 notnullall으로 한 줄에 모든 True 값을 생성 필터링 할 수 있습니다

df1 = df1[df1.notnull().all(axis=1)] 
print (df1) 
    value weight 
0 10.0  1.0 
3 40.0  4.0 

df2 = (df1["value"] * df1["weight"]).sum()/df1["weight"].sum() 
print (df2) 
34.0 

또는 개별적으로 모두 열을 확인합니다

df1 = df1[df1["value"].notnull() & df1["weight"].notnull()] 
print (df1) 
    value weight 
0 10.0  1.0 
3 40.0  4.0 

더 간단에게 솔루션을 dropna으로 :

df1 = df1.dropna() 
print (df1) 
    value weight 
0 10.0  1.0 
3 40.0  4.0 

또는 필요한 경우 열을 지정하십시오.

df1 = df1.dropna(subset=['value','weight']) 
print (df1) 
    value weight 
0 10.0  1.0 
3 40.0  4.0