首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:将分组平均值赋值给一维数组

问Python:将分组平均值赋值给一维数组
EN

Stack Overflow用户
提问于 2017-07-05 17:03:22
回答 3查看 58关注 0票数 3

假设我有两个数组:

代码语言:javascript
复制
x    = [2, 4, 1, 7, 3, 9, 2, 5, 5, 1]
flag = [0, 1, 0, 2, 1, 1, 2, 0, 0, 2]

flag数组指示x的每个元素属于哪个“组”。如何将x的每个元素(例如,标志值k)替换为x的所有元素的平均值,其对应的flag值也是k。

经过这样的转换后,x看起来应该是:

代码语言:javascript
复制
x    = [3.25, 5.33, 3.25, 3.33, 5.33, 5.33, 3.33, 3.25, 3.25, 3.33]

(我可以使用循环来实现这一点,但这将是相当低效的。)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-05 17:09:56

一种选择是使用Pandas:

代码语言:javascript
复制
import pandas as pd
x    = [2, 4, 1, 7, 3, 9, 2, 5, 5, 1]
flag = [0, 1, 0, 2, 1, 1, 2, 0, 0, 2]
s = pd.Series(x,index=flag)
s.groupby(level=0).transform('mean').tolist()

输出:

代码语言:javascript
复制
[3.25,
 5.333333333333333,
 3.25,
 3.3333333333333335,
 5.333333333333333,
 5.333333333333333,
 3.3333333333333335,
 3.25,
 3.25,
 3.3333333333333335]
票数 3
EN

Stack Overflow用户

发布于 2017-07-05 17:19:35

您可以使用np.bincount计算分组方法:

代码语言:javascript
复制
import numpy as np
x    = np.array([2, 4, 1, 7, 3, 9, 2, 5, 5, 1])
flag = np.array([0, 1, 0, 2, 1, 1, 2, 0, 0, 2])
total = np.bincount(flag, weights=x)
count = np.bincount(flag)
means = (total/count)[flag]

收益率

代码语言:javascript
复制
array([ 3.25      ,  5.33333333,  3.25      ,  3.33333333,  5.33333333,
        5.33333333,  3.33333333,  3.25      ,  3.25      ,  3.33333333])

对于更多的广义分组统计信息,也有 function。它可以计算分组均值、中值、计数、和、最小、最大统计量。它还可以接受统计数据的用户定义函数,但是性能(当然)要比内置统计数据慢。

票数 5
EN

Stack Overflow用户

发布于 2017-07-05 17:25:20

代码语言:javascript
复制
>>> def grouped_mean(data, flags):
...     flag_set = set(flags)
...     flags = np.asarray(flags)
...     data = np.array(data)
...     for s in flag_set:
...         m = (flags == s)
...         data[m] = np.mean(data[m])
...     return data
... 

>>> grouped_mean(x, flag)
array([ 3.25      ,  5.33333333,  3.25      ,  3.33333333,  5.33333333,
        5.33333333,  3.33333333,  3.25      ,  3.25      ,  3.33333333])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44932120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档