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

如何计算Pandas DataFrame/Numpy数组中值的连续重复均值

解决连续重复次数统计及均值计算问题

方法一:使用Pandas实现

步骤1:识别连续重复组并统计次数

通过生成分组标记区分连续相同的AOI片段,再统计每个片段的长度:

import pandas as pd
import numpy as np

a = np.array([55, 55, 69, 151, 151, 151, 103, 151, 151, 103])
df = pd.DataFrame(a, columns=["AOI"])

# 生成连续相同值的分组ID:当前值与前一个不同时,分组ID递增
df['group_id'] = df['AOI'].ne(df['AOI'].shift()).cumsum()

# 按分组ID和AOI分组,计算每组长度(即连续重复次数)
segment_counts = df.groupby(['group_id', 'AOI']).size().reset_index(name='count')

执行后得到各连续段的统计结果:

group_idAOIcount
1552
2691
31513
41031
51512
61031

步骤2:计算各AOI的连续重复次数均值

按AOI分组后对连续次数求均值:

aoi_mean = segment_counts.groupby('AOI')['count'].mean()

得到的均值结果:

AOI
55     2.0
69     1.0
103    1.0
151    2.5
Name: count, dtype: float64

步骤3:生成目标numpy数组

创建全0数组并填充对应索引的均值:

# 初始化长度为151的全0数组
result = np.zeros(151, dtype=np.float64)

# 将均值填充到对应AOI值的索引位置
for aoi, mean_val in aoi_mean.items():
    result[aoi] = mean_val

方法二:纯Numpy实现(无需Pandas)

如果仅使用numpy处理原始数组:

import numpy as np
from collections import defaultdict

a = np.array([55, 55, 69, 151, 151, 151, 103, 151, 151, 103])

# 找到连续段的分割点
split_points = np.where(np.diff(a) != 0)[0] + 1
split_points = np.concatenate([[0], split_points, [len(a)]])

# 计算每个连续段的长度和对应AOI值
segment_lengths = np.diff(split_points)
segment_values = a[split_points[:-1]]

# 统计每个AOI的所有连续长度并计算均值
aoi_lengths = defaultdict(list)
for val, length in zip(segment_values, segment_lengths):
    aoi_lengths[val].append(length)
aoi_mean = {val: np.mean(lengths) for val, lengths in aoi_lengths.items()}

# 生成目标数组
result = np.zeros(151, dtype=np.float64)
for val, mean_val in aoi_mean.items():
    result[val] = mean_val

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:27:35