我有这个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