我有一个' 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
是否有人知道考虑因缺失值而导致的此变化的最佳方法并计算平均值?
答案 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)