我想计算数据帧a、b、c、d列的平均值,但如果每个数据帧行中的四个值中有一个与该平均值(四个值中的一个)相差超过20%,则必须将平均值设置为NaN
计算4列的平均值很容易,但我一直在定义条件“if mean*0.8<;=数据行中的一个值<;=平均值*1,2,然后平均值==NaN
在本例中,ID:5 en ID:87中的一个或多个值不符合间隔,因此平均值设置为NaN。 (在计算平均值和将20%条件应用于计算平均值时,忽略初始数据帧中的NaN值)
因此,我试图只计算没有“异常值”的数据行的平均值
初始df:
ID a b c d
2 31 32 31 31
5 33 52 159 2
7 51 NaN 52 51
87 30 52 421 2
90 10 11 10 11
102 41 42 NaN 42
所需df:
ID a b c d mean
2 31 32 31 31 31.25
5 33 52 159 2 NaN
7 51 NaN 52 51 51.33
87 30 52 421 2 NaN
90 10 11 10 11 10.50
102 41 42 NaN 42 41.67
代码:
import pandas as pd
import numpy as np
df = pd.DataFrame({"ID": [2,5,7,87,90,102],
"a": [31,33,51,30,10,41],
"b": [32,52,np.nan,52,11,42],
"c": [31,159,52,421,10,np.nan],
"d": [31,2,51,2,11,42]})
print(df)
a = df.loc[:, ['a','b','c','d']]
df['mean'] = (a.iloc[:,0:]).mean(1)
print(df)
b = df.mean.values[:,None]*0.8 < a.values[:,:] < df.mean.values[:,None]*1.2
print(b)
...
试试这个:
输出:
相关问题 更多 >
编程相关推荐