python - 如何从第一个非 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 值。
与其他代码相同...
我怎样才能做到这一点?
提前致谢。
解决方案
如果需要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
如果需要明确过滤列CODE
:mask
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'})
推荐阅读
- angular - Angular8:HttpClient发布到服务器地址
- c++ - 检测和计数接触(遮挡问题)并具有相同颜色的图像
- string - 字符串文字和字符连接输出
- javascript - 如何在 React 本机应用程序上从本机调用 JavaScript 函数
- python-3.x - 在 Pandas 列中查找多行的最大值
- snowflake-cloud-data-platform - 是否可以在不限定数据库名称的情况下运行雪花 sql 脚本。?
- asp.net-mvc - 为什么我在 .net core 3 中收到错误 CS0246?
- blogger - 目标 _blank “条件”
- c# - 在 CSHTML 表中显示 +100.000 个条目需要花费大量时间
- c# - 从结果中保存图像在 asp.net 核心中转换 base64 字符串