假设我有2个数组:
x = [2, 4, 1, 7, 3, 9, 2, 5, 5, 1]
flag = [0, 1, 0, 2, 1, 1, 2, 0, 0, 2]
标志数组指示x的每个元素属于哪个“组”.如何用x的所有元素的平均值替换x的每个元素(比如标志值k),其对应的标志值也是k?
经过这样的转换后,x看起来像:
x = [3.25, 5.33, 3.25, 3.33, 5.33, 5.33, 3.33, 3.25, 3.25, 3.33]
(我可以使用循环来实现这一点,但效率很低.)
解决方法:
一种选择是使用熊猫:
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()
输出:
[3.25,
5.333333333333333,
3.25,
3.3333333333333335,
5.333333333333333,
5.333333333333333,
3.3333333333333335,
3.25,
3.25,
3.3333333333333335]
标签:python,arrays,numpy
来源: https://codeday.me/bug/20190717/1486887.html