如何获取数据帧列值的平均值

30
                    A        B
DATE                 
2013-05-01        473077    71333
2013-05-02         35131    62441
2013-05-03           727    27381
2013-05-04           481     1206
2013-05-05           226     1733
2013-05-06           NaN     4064
2013-05-07           NaN    41151
2013-05-08           NaN     8144
2013-05-09           NaN       23
2013-05-10           NaN       10

假设我的数据帧如上所示。如何最简单地获取一个具有相同索引的系列,该系列是列A和B的平均值?平均值需要忽略NaN值。关键是这个解决方案需要灵活适应数据帧中新列的添加。

我能找到的最接近的方法是

df.sum(axis=1) / len(df.columns)

然而,这似乎并没有忽略NaN值

(注意:我对Pandas库还有点陌生,所以我猜肯定有一种显而易见的方法可以解决这个问题,只是我的头脑有限,暂时想不到)


2
请阅读http://pandas.pydata.org/pandas-docs/dev/missing_data.html中有关缺失数据的内容。 - Rachel Gallen
1个回答

65

使用df.mean()就能够正确地处理NaN值:

>>> df
                 A      B
DATE                     
2013-05-01  473077  71333
2013-05-02   35131  62441
2013-05-03     727  27381
2013-05-04     481   1206
2013-05-05     226   1733
2013-05-06     NaN   4064
2013-05-07     NaN  41151
2013-05-08     NaN   8144
2013-05-09     NaN     23
2013-05-10     NaN     10
>>> df.mean(axis=1)
DATE
2013-05-01    272205.0
2013-05-02     48786.0
2013-05-03     14054.0
2013-05-04       843.5
2013-05-05       979.5
2013-05-06      4064.0
2013-05-07     41151.0
2013-05-08      8144.0
2013-05-09        23.0
2013-05-10        10.0
dtype: float64
您可以使用 df[["A", "B"]].mean(axis=1) 来忽略其他列。

1
我必须执行df.mean(axis=1)才能正确地完成它,但感谢您让我走上了正确的轨道。我想今天早上我需要再喝两三杯咖啡。 :) - badideas
1
@zaphod:啥?那不就是我上面写的吗?[哦,你是指第一行,而不是例子中。我在那里谈论的是df.mean相对于NaN的行为,但我可以理解那会让人感到困惑。] - DSM
但是mean()函数不是计算中位数吗?那和平均数不一样。 - Adam Bajger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接