dataframe基于其他列获取列的平均值

2024-05-08 02:49:29 发布

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

有一个带有值的df

df

name    maths  english   chemistry     
 

mark     10       0         20             
tom      10       20        30             
hall     0        25        15             

如何获取每个用户的平均分数,而不考虑其中的值0

预期产量

name    maths  english   chemistry     average marks
 

mark     10       0         20             15
tom      10       20        30             30
hall     0        25        15             20



Tags: 用户namedfenglish分数mark产量average
2条回答

您可以将要忽略的值更改为nan,然后计算平均值。这可以通过df.replace({0: pd.NA})完成,如以下代码所示:

import pandas as pd

df = pd.DataFrame({
    "math": {"mark": 10, "tom":10, "hall": 0}, 
    "english": {"mark":0, "tom": 20,"hall":25},
    "chemistry": {"mark":20, "tom":30, "hall":15}
})
df["average_marks"] = df.replace({0: pd.NA}).mean(axis=1)
df

产出:

      math  english  chemistry  average_marks
mark    10        0         20           15.0
tom     10       20         30           20.0
hall     0       25         15           20.0

在计算平均值之前,可以屏蔽零值:

df.assign(average_marks=df.mask(df.eq(0)).select_dtypes("number").mean(1))


    name    maths   english chemistry   average_marks
0   mark    10         0       20         15.0
1   tom     10        20       30         20.0
2   hall    0         25       15         20.0

@trimvi的解决方案更简单。这只是一种选择

相关问题 更多 >