如何计算 pandas 列上的非空值然后聚合
How to count not null values on pandas column then agregating
我想计算每个聚合级别的列的非空值:
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。这里有什么问题以及如何解决
您需要添加另一个条件 notnull
,因为 0 != np.nan
为 True
(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
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")
我想计算每个聚合级别的列的非空值:
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。这里有什么问题以及如何解决
您需要添加另一个条件 notnull
,因为 0 != np.nan
为 True
(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
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")