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

Python Pandas技术求助:统计列表重复项并计算重复项差值

解决思路与实现代码

核心步骤拆解

要实现你需要的重复项统计与Delta计算,分3步即可完成:

  1. 记录每个数字的所有出现位置:遍历原始列表,用字典存储每个数字对应的所有索引位置,这是后续统计的基础。
  2. 生成基础统计项:对每个目标数字(比如你示例中的0-9),计算出现次数(total)、首次出现位置(first-occurence)。
  3. 计算Delta值:根据需求(相邻出现位置差值/与首次出现位置的差值)生成对应的Delta列,最后整理成目标格式的DataFrame。

代码实现

假设你的原始列表是 nums = [1,9,1,3,0,3,6,0,2,0](对应你示例左侧的索引与值),代码如下:

from collections import defaultdict
import pandas as pd

# 原始列表
nums = [1,9,1,3,0,3,6,0,2,0]

# 1. 收集每个数字的所有出现索引
index_map = defaultdict(list)
for idx, num in enumerate(nums):
    index_map[num].append(idx)

# 2. 构建每行的统计数据
result_rows = []
# 覆盖数字0-9(可根据需求调整范围)
for target_num in range(10):
    positions = index_map.get(target_num, [])
    count = len(positions)
    first_pos = positions[0] if count > 0 else None
    
    # 计算Delta:这里以「后续出现位置 - 首次出现位置」为例,若要相邻差值可改用 positions[i] - positions[i-1]
    deltas = [pos - first_pos for pos in positions[1:]] if count > 1 else []
    
    # 组装行数据
    row = {
        'numbers': target_num,
        'total': count if count > 0 else 0,
        'first-occurence': first_pos if count > 0 else ''
    }
    # 添加Delta列
    for i, delta_val in enumerate(deltas, 1):
        row[f'Delta_{i}'] = delta_val
    
    result_rows.append(row)

# 3. 生成DataFrame并格式化空值
df = pd.DataFrame(result_rows).fillna('')
# 打印结果(和你要的布局一致)
print(df.to_string(index=False))

关键细节说明

  • Delta的灵活计算:如果需要的是相邻出现位置的差值,把Delta计算部分改成 deltas = [positions[i] - positions[i-1] for i in range(1, len(positions))] 即可。
  • 空值填充:用fillna('')把无数据的位置设为空字符串,和你示例的格式匹配。
  • 目标数字范围:如果不需要覆盖0-9,只需调整range(10)为你需要的数字范围即可。

内容的提问来源于stack exchange,提问作者Oily13

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:33:08