欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > python : groupby 结果浅解

python : groupby 结果浅解

2024/10/24 10:17:19 来源:https://blog.csdn.net/m0_46478042/article/details/140828552  浏览:    关键词:python : groupby 结果浅解

    for x, y in groupby(sorted(zip(x_data, y_data)), key=lambda _: _[0]):
        y_list = [v for _, v in y]

要明白这句,其实玄机在上句。我们首先要搞明白groupby 返回的结果类型,然后才用列表解析去相应处理。

groupby 返回结果中,x 是x_data 的有序唯一值,而 y 已不单纯再是个列表值,而是个groupby 对象,包含了x,y 值的组合。不能直接打印,但可以取出来再操作, 感觉像个元组列表。详见实验:

from itertools import groupby

xlist = [1,2,1,4]
ylist = [2,3,4,2]
   
xy_map =[]
for x, y in groupby(sorted(zip(xlist, ylist)), key=lambda _: _[0]):
    print ("\nx:",x)
   # print ("y:",y)#y is a groupby object which can't directly print
       
    y_list = [v for w,v in y]
    print ("y_list:",y_list)
    xy_map.append([x, sum(y_list)/len(y_list)])
print ("xy_map:",xy_map,"\n")

"sorted(zip(xlist, ylist)), key=lambda _: _[0]"之后的结果类似:

[1,2],[1,4],[2,3],[4,2]

再 groupby处理后 x,y的结果类似:
1,[(1, 2), (1, 4)]

2,[(2, 3)]

3,[(4, 2)]

【敲黑板】看y的值。。。

所以

y_list = [v for _,v in y]

等同于 y_list = [v for w,v in y]

只是要跳过前面部分,取groupby y 值中后面那部分,即返回v赋值给y_list。如[(1, 2), (1, 4)]中的 2,4,[(2, 3)]中的3

延申,换个顺序:x_list = [v for v,_ in y]就会返回[(1, 2), (1, 4)]中的 1,1,[(2, 3)]中的2

打印结果如下:

x: 1

y_list: [2, 4]

x: 2

y_list: [3]

x: 4

y_list: [2]

xy_map: [[1, 3.0], [2, 3.0], [4, 2.0]]

进一步实验也验证了这个理解,比如不分-,v 或者w,v(这里w只是随便起的名字,你叫他test或什么效果一样),直接取y的值打印

for x, y in groupby(sorted(zip(xlist, ylist)), key=lambda _: _[0]):
    print ("x:",x)

    y_list = [v for v in y]
    print ("y_list_2:",y_list)

 结果如下:

x: 1

y_list_2: [(1, 2), (1, 4)]

x: 2

y_list_2: [(2, 3)]

x: 4

y_list_2: [(4, 2)]

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com