使用 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
我想获取文件中某列每 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