groupby - python dataframe fillna example




Groupby 클래스 및 기능에서 누락 된 값 계산 (2)

countsize 사이의 diff 사용하기

g=df.groupby('CLASS')

-g.count().sub(g.size(),0)

          FEATURE1  FEATURE2  FEATURE3
CLASS                              
B             0         0         0
X             1         1         2

그리고이 질문을보다 일반적인 질문으로 바꿀 수 있습니다 for for 루프를 사용하여 데이터 프레임에서 얼마나 많은 NaN 을 계산하는지

pd.DataFrame({x: y.isna().sum()for x , y in g }).T.drop('CLASS',1)
Out[468]: 
   FEATURE1  FEATURE2  FEATURE3
B         0         0         0
X         1         1         2

문제가있어 웹이나 문서에서 해결책을 찾지 못한다고 생각합니다. 매우 사소한 것으로 생각합니다.

나는 무엇을하고 싶니?

나는 이런 데이터 프레임을 가지고있다.

CLASS FEATURE1 FEATURE2 FEATURE3
  X      A       NaN      NaN
  X     NaN       A       NaN
  B      A        A        A

레이블 ( CLASS )로 그룹화하고 모든 피쳐에 포함 된 NaN 값의 수를 표시하여 다음과 같이 표시하려고합니다. 이것의 목적은 누락 된 값이 다른 클래스에 어떻게 분포되어 있는지에 대한 일반적인 아이디어를 얻는 것입니다.

CLASS FEATURE1 FEATURE2 FEATURE3
  X      1        1        2
  B      0        0        0

null아닌 값을받는 방법을 알고 있습니다. -Values ​​- df.groupby['CLASS'].count()

NaN 값 과 비슷한 것이 있습니까?

size ()에서 count ()를 뺍니다. 그러나 NaN 값으로 채워진 형식화되지 않은 출력을 반환했습니다.


isna 하여 마스크를 계산 한 다음 합계를 그룹화하고 찾습니다.

df.drop('CLASS', 1).isna().groupby(df.CLASS, sort=False).sum().reset_index()

  CLASS  FEATURE1  FEATURE2  FEATURE3
0     X       1.0       1.0       2.0
1     B       0.0       0.0       0.0

또 다른 옵션은 인덱스 정렬 뺄셈을 위해 0 번째 축을 따라 rsub 를 사용하여 count 에서 size 를 뺍니다.

df.groupby('CLASS').count().rsub(df.groupby('CLASS').size(), axis=0)

또는,

g = df.groupby('CLASS')
g.count().rsub(g.size(), axis=0)

       FEATURE1  FEATURE2  FEATURE3
CLASS                              
B             0         0         0
X             1         1         2

몇 가지 좋은 답변이 있으므로 다음은 귀하의 열정에 대한 몇 가지 timeits 입니다.

df_ = df
df = pd.concat([df_] * 10000)

%timeit df.drop('CLASS', 1).isna().groupby(df.CLASS, sort=False).sum()
%timeit df.set_index('CLASS').isna().sum(level=0)    
%%timeit
g = df.groupby('CLASS')
g.count().rsub(g.size(), axis=0)

11.8 ms ± 108 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
9.47 ms ± 379 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
6.54 ms ± 81.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

실제 성능은 데이터 및 설정에 따라 다르므로 마일리지가 다를 수 있습니다.





nan