我的数据集(年度数据)如下所示
CODE Date PRCP TAVG TMAX TMIN
AE000041196 01-01-2020 0 21.1
AE000041196 02-01-2020 0 21.4
AE000041196 03-01-2020 0 21.2 15.4
AE000041196 04-01-2020 0 21.9 14.9
AE000041196 05-01-2020 0 23.7 16.5
AE000041196 06-01-2020 0.5 20.7
AE000041196 07-01-2020 0 18.1 11.5
AE000041196 08-01-2020 0 19.6 10.3
AE000041196 09-01-2020 0.3 20.6 13.8
我试图找出 CODE 中每个值的 TMAX 和 TMIN 列的最长连续缺失值[每个 'CODE'
的连续 NaN 的最大计数]。例如。从上面有限的数据集中:
TMAX
的最大连续缺失值为 9,TMIN
的最大连续缺失值为 2
我正在使用的代码
df['TMAX_nullccount'] = df.TMAX.isnull().astype(int).groupby(df['TMAX'].notnull().astype(int).cumsum()).cumsum()
这会导致数据集出现错误
CODE Date PRCP TAVG TMAX TMIN TMAX_nullccount
CA1AB000014 10-03-2021 2.3 297
CA1AB000014 11-03-2021 0 298
CA1AB000014 12-03-2021 0 299
CA1AB000014 13-03-2021 0 300
CA1AB000014 14-03-2021 0 301
CA1AB000015 01-01-2021 0 302
CA1AB000015 02-01-2021 0 303
CA1AB000015 03-01-2021 0 304
CA1AB000015 04-01-2021 0 305
理论上,count(TMAX_nullcount) 应该从 0 开始,再次将代码从 CA1AB000014
更改为 CA1AB000015
。此外,TMAX_nullcount
列中的值不能超过 365(年度数据集),但我的代码给出的值远不止于此。
预期输出文件(值是虚构的)
CODE TMAX_maxcnullcount TMIN_maxcnullcount TAVG_maxcnullcount
AE000041196 2 2 0
AEM00041194 1 1 0
AEM00041217 3 1 0
AEM00041218 1 2 45
AFM00040938 65 65 0
AFM00040948 132 132 0
AG000060390 155 141 0
我该如何解决这个问题?提前致谢
最佳答案
您可以使用:
首先测试是否匹配缺失值:
print (df.isna())
CODE Date PRCP TAVG TMAX TMIN
0 False False False False True True
1 False False False False True True
2 False False False False True False
3 False False False False True False
4 False False False False True False
5 False False False False True True
6 False False False False True False
7 False False False False True False
8 False False False False True False
#columsn for test missing values
cols = ['TMAX','TMIN','TAVG']
#CODe to index, filter columns and create one Series
m = df.set_index('CODE')[cols].isna().unstack()
#create consecutive groups and count them with maximal count per column and group
df = (m.ne(m.shift()).cumsum()
.where(m)
.groupby(level=[0,1]).value_counts()
.max(level=[0,1])
.unstack(0)
.add_suffix('_maxcnullcount'))
print (df)
TMAX_maxcnullcount TMIN_maxcnullcount
CODE
AE000041196 9 2
关于python - Pandas 数据框中按键列分组的连续空值的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66684740/