pandas 包含缺失值的列子集的行平均值

mitkmikd  于 2023-04-10  发布在  其他
关注(0)|答案(4)|浏览(133)

我有一个'DataFrame',它偶尔会丢失值,看起来像这样:

Monday         Tuesday         Wednesday 
      ================================================
Mike        42             NaN               12
Jenna       NaN            NaN               15
Jon         21              4                 1

我想在我的 Dataframe 中添加一个新的column,在这里我将计算每个row的所有columns的平均值。
这意味着,对于Mike,我需要(df['Monday'] + df['Wednesday'])/2,但对于Jenna,我只需使用df['Wednesday amt.']/1
有谁知道最好的方法来解释这种变化,结果从缺失值和计算平均值?

rt4zxlrg

rt4zxlrg1#

您只需:

df['avg'] = df.mean(axis=1)

       Monday  Tuesday  Wednesday        avg
Mike       42      NaN         12  27.000000
Jenna     NaN      NaN         15  15.000000
Jon        21        4          1   8.666667

因为默认情况下.mean()会忽略缺失值:see docs
要选择子集,您可以:

df['avg'] = df[['Monday', 'Tuesday']].mean(axis=1)

       Monday  Tuesday  Wednesday   avg
Mike       42      NaN         12  42.0
Jenna     NaN      NaN         15   NaN
Jon        21        4          1  12.5
1u4esq0p

1u4esq0p2#

替代-使用iloc(也可以在这里使用loc):

df['avg'] = df.iloc[:,0:2].mean(axis=1)
ac1kyiln

ac1kyiln3#

正在恢复此问题,因为所有以前的答案当前都打印警告。
在大多数情况下,使用assign()

df = df.assign(avg=df.mean(axis=1))

对于特定列,可以通过名称输入:

df = df.assign(avg=df.loc[:, ["Monday", "Tuesday", "Wednesday"]].mean(axis=1))

或者按索引,使用比最后一个所需索引多一个的索引,因为它不是包含性的:

df = df.assign(avg=df.iloc[:,0:3]].mean(axis=1))
lokaqttq

lokaqttq4#

使用apply方法:

df['avg'] = df[['Monday', 'Tuesday']].apply(np.avg, axis = 1)

相关问题