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

使用Python pandas DataFrame计算CSV文件中魔方成绩的滑动剪枝平均值

基于pandas的魔方还原时长滑动剪枝平均值计算实现

前置说明

你的CSV文件需包含至少1列存储魔方还原时长的浮点数据,示例CSV结构如下:

id,time
1,8.32
2,7.95
3,9.11
4,8.56
...

完整实现代码

import pandas as pd

# 自定义剪枝规则配置:{窗口大小: (剪掉的最优数量, 剪掉的最差数量)}
default_trim_config = {
    5: (1, 1),
    12: (1, 1),
    25: (2, 2),
    50: (2, 3)
}

def calc_trimmed_mean(window_data, trim_low: int, trim_high: int):
    """计算单窗口的剪枝平均值"""
    sorted_data = sorted(window_data.dropna())
    # 数据量不足剪枝要求时直接返回原始平均
    if len(sorted_data) <= trim_low + trim_high:
        return sum(sorted_data)/len(sorted_data)
    # 剪掉首尾指定数量的成绩后求平均
    trimmed_data = sorted_data[trim_low : len(sorted_data)-trim_high]
    return round(sum(trimmed_data)/len(trimmed_data), 3)

if __name__ == "__main__":
    # -------------------------- 可修改配置项 --------------------------
    csv_path = "cube_times.csv"  # 替换为你的CSV文件路径
    time_col = "time"  # CSV中存储时长的列名
    window_size = 5  # 滑动窗口大小,支持5/12/25/50或自定义数值
    # 如需自定义剪枝数量,直接修改下面两个参数,默认会自动匹配上面的规则
    trim_low = None
    trim_high = None
    # -------------------------------------------------------------------

    # 读取CSV数据
    df = pd.read_csv(csv_path)
    time_series = df[time_col]

    # 校验数据量
    if len(time_series) < window_size:
        print(f"错误:数据总条数({len(time_series)})小于窗口大小({window_size}),无法计算滑动平均")
        exit()

    # 匹配剪枝规则
    if trim_low is None or trim_high is None:
        trim_low, trim_high = default_trim_config.get(window_size, (0, 0))
        print(f"自动匹配剪枝规则:窗口大小{window_size},剪掉{trim_low}个最优、{trim_high}个最差成绩")

    # 计算滑动剪枝平均值
    rolling_trimmed_mean = time_series.rolling(window=window_size).apply(
        lambda x: calc_trimmed_mean(x, trim_low, trim_high)
    )
    # 去掉前面窗口不足的空值
    result_list = rolling_trimmed_mean.dropna().tolist()
    # 找最优平均值(魔方还原时间越短越好,所以取最小值)
    best_mean = min(result_list)

    # 输出结果
    print("\n所有滑动剪枝平均值如下:")
    for idx, val in enumerate(result_list, 1):
        mark = " * 最优平均" if val == best_mean else ""
        print(f"窗口{idx}:{val}{mark}")

    print(f"\n全局最优剪枝平均值:{best_mean}")

使用说明

  • 默认剪枝规则可直接修改default_trim_config字典调整,也可以直接给trim_low和trim_high赋值,覆盖自动匹配的规则
  • 窗口大小可自由修改,未在默认规则中配置的窗口大小默认不会剪枝,可手动指定剪枝数量
  • 输出结果会自动标记所有等于最优值的窗口结果,最后单独输出全局最优平均值

内容的提问来源于stack exchange,提问作者Gauthier C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:27:04