You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 16:32:30