首页 > 解决方案 > 如何从第一个非 nan 值开始分组和计数?

问题描述

我有这个df

         CODE    TMAX
0        000130  NaN
1        000130  NaN
2        000130  32.0
3        000130  32.2
4        000130  NaN
5        158328  NaN
6        158328  8.8
7        158328  NaN
8        158328  NaN
9        158328  9.2
...      ...     ...

我想计算“TMAX”列中非 nan 值的数量和 nan 值的数量。但我想从第一个非 NaN 值和代码开始计算。

代码 000130 中的预期结果:2 个非 nan 值和 1 个 NaN 值。

代码 158328 中的预期结果:2 个非 nan 值和 2 个 NaN 值。

与其他代码相同...

我怎样才能做到这一点?

提前致谢。

标签: pythonpandas

解决方案


如果需要CODE也可以通过以下方式添加GroupBy.cummax和计数值crosstab

m = df.TMAX.notna()
s = m[m.groupby(df['CODE']).cummax()]
df1 = pd.crosstab(df['CODE'], s).rename(columns={True:'non NaNs',False:'NaNs'})
print (df1)
TMAX    NaNs  non NaNs
CODE                  
130        1         2
158328     2         2

如果需要明确过滤列CODEmask

m = df.TMAX.notna()
mask = m.groupby(df['CODE']).cummax()
df1 = pd.crosstab(df.loc[mask, 'CODE'], m[mask]).rename(columns={True:'non NaNs',False:'NaNs'})

推荐阅读