如何用Python遍历列中的行并计数?
我正在尝试用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()
...