Python迭代表格统计人员地点变更对出现次数的实现方案
解决人员地点变更统计的迭代方案
嘿,这个需求很常见啊,咱们一步步来实现~核心思路就是先按人员分组拿到各自的时间线地点,再逐个提取变更对,最后统计次数就行。
步骤拆解
- 首先得把同一个人的地点按时间顺序归拢到一起,毕竟要统计每个人的行程变更,得先明确每个人的地点序列
- 对每个人员的地点序列,遍历生成相邻的地点变更对(比如从GA到IL就记为
GA-IL) - 最后统计所有变更对的出现次数,整理成要求的列表格式
Python 代码实现
from collections import defaultdict # 给定的示例数据 People = ["A", "A", "B", "B", "B", "C", "C", "C"] Location = ["GA", "IL", "GA", "IL", "GA", "CA", "IL", "GA"] # 1. 按人员分组,收集每个人的地点时间线 person_timeline = defaultdict(list) for person, loc in zip(People, Location): person_timeline[person].append(loc) # 2. 遍历每个人员的时间线,生成变更对并计数 change_counter = defaultdict(int) for locations in person_timeline.values(): # 从第二个地点开始,和前一个地点组成变更对 for idx in range(1, len(locations)): prev_loc = locations[idx-1] curr_loc = locations[idx] change_pair = f"{prev_loc}-{curr_loc}" change_counter[change_pair] += 1 # 3. 转换成要求的输出格式 Change_of_location = list(change_counter.keys()) count = list(change_counter.values()) # 验证结果 print(Change_of_location) # 输出: ['GA-IL', 'IL-GA', 'CA-IL'] print(count) # 输出: [2, 2, 1]
代码解释
- 分组阶段:用
zip把人员和对应地点配对,用defaultdict自动创建列表来存储每个人的地点,保证顺序和原数据一致(因为原数据是按时间排序的) - 变更对生成:对每个人员的地点列表,从索引1开始(也就是第二个地点),和前一个地点拼接成
前-后的字符串格式,然后在计数器里累加次数 - 结果转换:把计数器的键(变更对)和值(次数)分别转成列表,就是你要的输出啦
如果不想用collections模块,也可以用普通字典手动实现分组逻辑,只是代码会稍显繁琐,比如每次检查人员是否在字典中,不存在就初始化空列表,本质逻辑是一样的。
内容的提问来源于stack exchange,提问作者DyrelundData
相关产品推荐
相关产品推荐

