繁体   English   中英

计算pandas中几列中item的平均值

[英]Calculating mean value of item in several columns in pandas

我有一个数据框,其值分布在几列上。 我想计算特定列中所有项目的平均值。

我查找的所有解决方案最终都给了我每列的单独方法或所选列的均值。

例如,我的Dataframe看起来像这样:

Name    a   b   c   d
Alice   1   2   3   4
Alice   2       4   2
Alice   3           2
Alice   1       5   2
Ben     3   3   1   3
Ben     4   1   2   3
Ben     1   2   2   

我希望看到每个“Alice”列b和c中值的平均值:

当我尝试:

df[df["Name"]=="Alice"][["b","c"]].mean()

结果是:

b    2.00
c    4.00
dtype: float64

在另一篇文章中,我发现了一个建议,为每个轴尝试“双”意味着一次,例如:

df[df["Name"]=="Alice"][["b","c"]].mean(axis=1).mean()

但结果是:

3.00

这是两个列的平均值。

我期待一种计算方法:(2 + 3 + 4 + 5)/ 4 = 3.50

有没有办法在Python中执行此操作?

你可以在这里使用numpy的np.nanmean [numpy-doc] ,它只是将你的数据帧部分看作一个数组,并默认计算整个部分的平均值:

>>> np.nanmean(df.loc[df['Name'] == 'Alice', ['b', 'c']])
3.5

或者,如果要按名称分组,可以先堆叠数据框,如:

>>> df[['Name','b','c']].set_index('Name').stack().reset_index().groupby('Name').agg('mean')
              0
Name           
Alice  3.500000
Ben    1.833333

可以groupby将所有值sum并得到它们各自的大小。 然后,除以得到均值。

这样你就可以同时获得所有的Name

g = df.groupby('Name')[['b', 'c']]
g.sum().sum(1)/g.count().sum(1)

Name
Alice    3.500000
Ben      1.833333
dtype: float64

PS:在你的例子中,看起来你在某些单元格中有空字符串。 这是不可取的,因为你将dtypes设置为object的列。 尝试使用NaN ,以充分利用矢量化操作。

假设您的所有列都是数字类型,空格是NaN 一个简单的set_indexstack和direct mean

df.set_index('Name')[['b','c']].stack().mean(level=0)

Out[117]:
Name
Alice    3.500000
Ben      1.833333
dtype: float64

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM