python - 按第二个元素对元组列表进行分组,取第一个元素的平均值
问题描述
我有一个元组列表(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 不会出现在其他任何地方,因此其他元组保持不变。
解决方案
既然你标记了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. ]])
推荐阅读
- coldfusion - 使用List从中间,第一个位置和最后一个位置删除元素
- excel - 动态重新定义 Excel 范围
- docker-compose - OCI 运行时执行失败:执行失败:container_linux.go:348:启动容器进程导致“没有这样的文件或目录”:未知
- linux - 100% 内核 CPU 终止与服务器的连接
- jquery - ajax 从 Spring Boot 获取 html 页面
- node.js - Alexa 音频播放器指令
- reactjs - 如何在反应中隐藏/显示特定组件
- assembly - 如何从字符串输入中删除逗号
- sql - 在 SQL Server 中创建递归函数
- java - 简单的 AsyncTasc - 更好的解决方案 - 防止内存泄漏