使用 pandas 对行进行分组时如何屏蔽值?

How to mask values when grouping rows with pandas?

我想获取文件中某列每 7 行的平均值,不包括特定平均值(即 -9999 和 0)

文件样本是

1 567
2 -9999
3 98
4 77
5 0 
6 89
7 77
8 567
9 -9999
10 87
11 0
12 10 
13 79
14 75

我得到每 7 行的平均值如下:

df=pd.read_csv(e,sep='\t',usecols=[1],skiprows=(0),header=None)
data_mean=df.groupby(np.arange(len(df))//7).mean() 
data_mean.index=data_week.index+1
data_mean.to_csv(outfile,sep="\t",header=False)

如果我只想获取整列的平均值并使用掩码,我会这样做

data_mean = df.mask(df.isin([-9999, 0])).mean(1) #to exclude 0 and -9999 

如何在第一个代码中使用掩码?

试试这个:

df.mask(df.isin([-9999, 0])).groupby(np.arange(len(df.index))//7).mean()

您可以用 NaN 替换 -9999 和 0:

df[df.isin([-9999, 0])] = np.NaN

然后应用您的第一个代码:

>>> df.groupby(np.arange(len(df))//7).mean()
       1
0  181.6
1  163.6