gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:56:00 26 4
gpt4 key购买 nike

我有这个 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
...
...
我怎样才能做到这一点?
提前致谢。

最佳答案

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

关于pandas - 如何获得第一个非 nan 值的 df?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66702274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com