如何获得具有第一个非nan值的df



我有这个df:

CODE      DATE     TMAX   TMIN   PP
0      000130 1991-01-01  NaN    NaN   0.0
1      000130 1991-01-02  31.2   NaN   0.0
2      000130 1991-01-03  32.0   21.2  0.0
3      000130 1991-01-04  NaN    NaN   0.0
4      000130 1991-01-05  NaN    22.0  0.0
...        ...   ...   ...  ...
34995  000135 1997-04-24  NaN    NaN   0.0
34996  000135 1997-04-25  NaN    NaN   4.0
34997  000135 1997-04-26  NaN    22.1  0.0
34998  000135 1997-04-27  31.0   NaN   5.0
34999  000135 1997-04-28  28.8   24.0  0.0

我正在按CODE列计算NaN值,在TMAX-TMIN和PP列中。所以我使用这段代码。

dfna=df[['TMAX','TMIN','PP']].isna().groupby(df.CODE).sum()

但我想从第一个非NaN值开始计算NaN值。

预期df:

CODE   TMAX TMIN PP
000130 2    1    0
000135 0    1    0    
...
...

我该怎么做?

提前谢谢。

从整个帧的角度来看,可以使用ffill来删除后面的nan值。因此,您可以使用它来检测第一个有效值之后的nan:

df.isna() & df.ffill().notna()

现在,您可以尝试groupby.apply

(df[['TMAX','TMIN','PP']].groupby(df['CODE'])
.apply(lambda d: (d.isna() & d.ffill().notna()).sum()) 
)

输出:

TMAX  TMIN  PP
CODE                
130      2     1   0
135      0     1   0

最新更新