微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在不使用 Pandas 的情况下在列表上应用多个聚合函数

如何解决在不使用 Pandas 的情况下在列表上应用多个聚合函数

我有一个行列表,有两个键列和 6 个值 列。 我想计算总和、平均值和最大值 值列,基于每个函数的列列表, 按键列分组,使用 itertools.groupby, 不使用熊猫。

columns = [ID,date,row1,row2,row3,row4,row5,row6]
rows = [[1,date1,1,1],[1,2,[2,3,1]]

ColSum = [row2,row6]
ColMean = [row1,row3]
ColMax = [row4,row5]

我期望计算的结果:

rows_result = [[1,0.5,2],6,2]] 

我的代码

for cols in ColSum:
  index = int(np.where(columns == cols)[0][0])
        
  for k,g in itertools.groupby(rows[:,index],operator.itemgetter(0,1)):
    res.append((list(k) +list(map(sum,zip(*[c[2:] for c in g])))))

for colm in colMean:
  index = int(np.where(columns == colm)[0][0])
    
  for k,zip(*[c[2:] for c in g])))))

然而,这不起作用。

解决方法

构建时分别计算每个分组列的结果 结果列表非常复杂。在 ColSum 的初始构造之后, 您必须编辑每个行级元素。可以做到,但我不会 认为它符合函数式编程的精神。

相反,下面的程序使用 ColFun 来设置要应用到的函数 每一列(相当于 row1 到 row6)。在 for 循环中, 它贯穿每个组(如 (1,'date1')),同时构造 具有请求的函数应用程序的 6 个值列的列表 列。

结果被附加到一个列表中,该列表与所需的(稍微编辑过的)相匹配 结果。

import itertools
import operator
import numpy as np

columns = ['ID','date','row1','row2','row3','row4','row5','row6']
rows = [[1,'date1',1,1],[1,2,[2,3,1]]

ColSum = ['row2','row6']
ColMean = ['row1','row3']
ColMax = ['row4','row5']
ColFun = [np.mean,np.sum,np.mean,np.max,np.sum]
rows_result = [[1,1.0,0.5,2],6,0.0,2]]

res = []
for k,g in itertools.groupby(rows,operator.itemgetter(0,1)):
    res.append(list(k) + [sum(map(z[0],z[1:])) for z in
        zip(ColFun,zip(*[c[2:] for c in g]))]
        )
print(res == rows_result)
# True
print(res)
# [[1,#  [2,2]]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?