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

时间:2021-03-19 03:51:01

标签: pandas pandas-groupby

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

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

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    
...
...

我该怎么做?

提前致谢。

1 个答案:

答案 0 :(得分:2)

从整个框架的角度考虑,您可以使用 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
相关问题