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

如何用Python Pandas自动分类风速数值列表?代码调试求助

问题分析

你的循环逻辑问题出在三层嵌套的无关联遍历:外层i循环遍历所有列表,中层e循环遍历所有区间起始值,内层遍历所有数值,导致每个列表都会被所有符合任意区间的数值重复填充,或者因i和e没有对应关系,出现逻辑混乱。

解决方案

方案1:修正手动循环逻辑

不需要三层嵌套,只需为每个数值找到对应区间的列表索引,直接填充:

import pandas as pd

wind = pd.read_csv("wind.csv")
df = pd.DataFrame(wind)
x = df["Value"]
d = sorted(pd.Series(x))

# 生成区间起始值列表,以及对应空列表
max_speed = int(x.max())
bins = list(range(0, max_speed + 1, 5))
lst = [[] for _ in bins]

# 遍历每个风速值,分配到对应区间列表
for n in d:
    # 计算对应区间索引,处理边界值
    if n >= bins[-1]:
        # 超过最大区间起始值的数值,放入最后一个列表
        lst[-1].append(n)
    else:
        # 左闭右开区间:[e, e+5),对应索引为n//5
        idx = int(n // 5)
        lst[idx].append(n)

如果需要严格匹配你最初的n>e且n<e+5(即开区间(e, e+5)),可以调整判断逻辑:

for n in d:
    for idx, e in enumerate(bins):
        if e < n < (e + 5):
            lst[idx].append(n)
            break  # 找到对应区间后立即跳出,避免重复判断
    else:
        # 处理刚好等于区间边界的数值(如n=5、n=10等),可根据需求放入对应列表
        if n in bins:
            lst[bins.index(n)].append(n)

方案2:用Pandas原生函数实现(更高效简洁)

Pandas的cut和groupby可以直接完成分组,避免手动循环的错误:

import pandas as pd

wind = pd.read_csv("wind.csv")
df = pd.DataFrame(wind)
x = df["Value"]

# 定义区间:左闭右开,包含所有风速值
max_speed = int(x.max())
bins = range(0, max_speed + 6, 5)  # 扩展到max_speed+5,确保覆盖最大值
# 生成区间标签(如"0-5"、"5-10")
labels = [f"{start}-{start+5}" for start in bins[:-1]]

# 为每条数据添加分组标签
df["wind_interval"] = pd.cut(df["Value"], bins=bins, labels=labels, include_lowest=True)

# 按分组提取数据,转换为列表集合
grouped_wind = [group["Value"].tolist() for _, group in df.groupby("wind_interval")]

这个方法更符合Pandas的使用习惯,代码简洁且性能更优,适合处理批量数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:31:03