itertools.groupby生成零值和非零值分组的键函数

2024-10-01 05:03:35 发布

您现在位置:Python中文网/ 问答频道 /正文

有人知道我如何在itertools.groupby函数按零值和非零值分组数据行?在

举一个简单的例子:

from collections import namedtuple
from operator import attrgetter
from itertools import groupby

FakeRow = namedtuple('FakeRow', ['start_date_time', 'wear_sensor', 
                                 'part_number', 'chip_count'])

data = [
    FakeRow(1,1,'999-045', 0),
    FakeRow(2,1,'999-045', 4),
    FakeRow(3,1,'999-045', 3),
    FakeRow(3,1,'999-047', 0),
    FakeRow(4,1,'999-045', 0),
    FakeRow(5,1,'999-047', 1),
]                         

# need to groupby start date time first
unique_keys = []
groups = []
data = sorted(data, key=attrgetter('start_date_time'))

# want to group by 'chip_count' but by zero and non-zero values
for k, g in groupby(data, key=my_key_func(*args)):
    groups.append(list(g))
    unique_keys.append(k)

def my_key_func(*args):
    '''Help itertools.groupby group by zeros, or group by anything non-zero'''
    pass

预期输出为:

^{pr2}$

谢谢。在


Tags: keyfromimportdatadatebytimegroup
1条回答
网友
1楼 · 发布于 2024-10-01 05:03:35

这应该和查看伪行的chip_count的布尔值一样简单:

def my_key_func(fakerow):
    return bool(fakerow.chip_count)

在这种情况下,unique_keys将是True或{},这可能不是您想要的。您可能希望使用set和updatefakerow.chip_count一起使用:

^{pr2}$

相关问题 更多 >