条件行平均

2024-09-26 22:54:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧:

x = pd.DataFrame({'1':[1,2,3,2,5,6,7,8,9], '2':[2,5,6,8,10,np.nan,6,np.nan,np.nan], 
    '3':[10,10,10,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan]})

我试图生成一行的平均值,但仅限于大于5的值。例如-如果一行的值为3、6、10。平均值为8((6+10)/2)。3将被忽略,因为它低于5

excel中的等效项为=AVERAGEIF(B2:DX2,“>;=5”)


Tags: 数据gtdataframenpnanexcelb2平均值
2条回答

您可以屏蔽大于5的值,然后取平均值:

x.where(x>5).mean(1)

或:

x.mask(x<=5).mean(1)

您可以创建一个小的自定义函数,在每一行中,将小于或等于某个value的值过滤掉,并将其过滤到数据帧的每一行

def average_if(s, value=5):
    s = s.loc[s > value]
    return s.mean()

x.apply(average_if, axis=1)

0    10.0
1    10.0
2     8.0
3     8.0
4    10.0
5     6.0
6     6.5
7     8.0
8     9.0
dtype: float64

相关问题 更多 >

    热门问题