如何用Python遍历列中的行并计数?

2 投票
2 回答
5913 浏览
提问于 2025-04-17 03:52

我正在尝试用Python遍历一个Access表格中的列。这个列的数据是按升序排列的。

我想逐行检查,当列中的值发生变化时,我想统计这些值的数量。在下面的例子中,我想统计的第一组值是M1。当下一行变成M21时,我想统计M21的数量,直到它变成M23b,依此类推。

我不想使用if/else语句,因为可能有几百种不同的值。我尝试过使用itertools模块中的groupby函数,但我还没能找到合适的语法来解决我的问题。我也试过一个简单的循环,像这样if row != row.next(): do_something,但结果并不理想。如果有人能给我提供一个解决方案或者示例代码,我会非常感激。

示例列:

M1
M1
M1
M21
M21
M23b
M23b
S2
S23b
S23B
O1
O2
O2
O2

2 个回答

4

你想到使用 itertools.groupby 是对的:

for key, group in groupby(column):
    count = sum(1 for item in group) # Thanks JBernardo
    # the key is what is in the column, count is the number of items

另外,如果你只需要统计数量,那就简单多了:

from collections import Counter # Python 2.7+

group_counts = Counter(column)

你可以这样实现 Counter

from collections import defaultdict:

group_counts = defaultdict(int)

for item in column:
    group_counts[item] += 1

在旧版本的Python上。

1

如果你想在一个循环中添加打印功能,同时还要做其他事情,下面的内容可能会对你有帮助:

from collections import Counter  # or defaultdict

col_counts = Counter()           # or defaultdict(int)

last_value = object()            # won't show up in table
for row in access_table:
    col_counts[row[field]] += 1
    if row[field] != last_value:
        print(col_counts[last_value])
        last_value = row[field]
    ...
    other_processing()
    ...

撰写回答