具有缺失值的列子集的行方式平均值

时间:2016-01-12 03:09:18

标签: python pandas dataframe

我有一个' DataFrame`偶尔有缺失值,看起来像这样:

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

我想在我的数据框中添加一个新的column,我计算每columns个所有row的平均值。

意味着,对于Mike,我需要 (df['Monday'] + df['Wednesday'])/2,但对于Jenna,我只需使用df['Wednesday amt.']/1

是否有人知道考虑因缺失值而导致的此变化的最佳方法并计算平均值?

3 个答案:

答案 0 :(得分:75)

你可以简单地说:

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

答案 1 :(得分:1)

重新提出这个问题,因为所有以前的答案当前都会打印警告。

在大多数情况下,使用 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))

答案 2 :(得分:0)

替代方法-使用iloc(也可以在此处使用loc):

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