首页 > 解决方案 > 按第二个元素对元组列表进行分组,取第一个元素的平均值

问题描述

我有一个元组列表(x,y),例如:

l = [(2,1), (4,6), (3,1), (2,7), (7,10)]

现在我想制作一个新列表:

l = [(2.5,1), (4,6), (2,7), (7,10)]

如果元组中有多个具有相同第二值 (y) 的元组,则新列表具有元组的第一个值 (x) 的平均值。

这里因为 (x,y) = (2,1) 和 (3,1) 元组中的第二个元素 y=1 是常见的,因此 x=2 和 3 的平均值在新列表中。y=1 不会出现在其他任何地方,因此其他元组保持不变。

标签: pythonpython-3.xpandasnumpypandas-groupby

解决方案


既然你标记了pandas

l = [(2,1), (4,6), (3,1), (2,7), (7,10)]
df = pd.DataFrame(l)

然后df是一个有两列的数据框:

    0   1
0   2   1
1   4   6
2   3   1
3   2   7
4   7   10

现在您要计算 column0中具有相同值的数字的平均值 column 1

(df.groupby(1).mean()     # compute mean on each group
   .reset_index()[[0,1]]  # restore the column order
   .values                # return the underlying numpy array
 )

输出:

array([[ 2.5,  1. ],
       [ 4. ,  6. ],
       [ 2. ,  7. ],
       [ 7. , 10. ]])

推荐阅读