Как посчитать ненулевые значения в столбце панд, затем агрегировать - PullRequest
0 голосов
/ 19 февраля 2019

Я бы хотел посчитать ненулевые значения столбца на уровень агрегации:

import pandas as pd
import numpy as np
df = pd.DataFrame({'agr' : [1,1,1],
                'col1' : [1, np.nan, np.nan],
               'col2' : [np.nan, 2, 3] })
df.agg({'col1' : [np.sum, np.count_nonzero],
       'col2' : [ np.sum, np.count_nonzero]})

Этот фиктивный подход дает 3,3.Но мне нужно 1,2.Что здесь не так и как это исправить

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

df.count() по умолчанию не включает NaN.

import pandas as pd
df = pd.DataFrame({'agr' : [1,1,1],
            'col1' : [1, np.nan, np.nan],
           'col2' : [np.nan, 2, 3] })
df[['col1', 'col2']].count()

-

col1    1
col2    2
dtype: int64

Другой способ:

df[['col1', 'col2']].agg("count")
0 голосов
/ 19 февраля 2019

Вам нужно добавить еще одно условие notnull, поскольку 0 != np.nan - это Истина

(df.ne(0)&df.notnull()).sum()
Out[305]: 
agr     3
col1    1
col2    2
dtype: int64

После вашего изменения

df.notnull().sum()
Out[322]: 
agr     3
col1    1
col2    2
dtype: int64
...