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

如何将CSV文件中的上下深度区间转换为固定采样率的单列数据

解决CSV区间展开为0.5步长序列的问题

我来帮你搞定这个需求!你想要把CSV里的数值区间(Top到Bottom)按0.5的步长展开成连续序列,同时填充对应Value,空缺位置设为Nan对吧?先说说你现有代码的问题:你把Value设为索引后执行stack操作,这只是把原数据的列转成行,完全没生成我们需要的连续数值序列,所以达不到目标。

下面是正确的实现步骤和代码:

步骤1:读取原始数据

首先正确读取CSV文件,注意列名的大小写(原CSV里是Value,不是小写的value):

import pandas as pd

# 读取你的CSV文件
df = pd.read_csv('D:\\Range.csv')

步骤2:生成完整的Top序列

我们需要生成从最小的Top值到最大的Bottom值,步长为0.5的所有数值:

# 获取数值范围的边界
min_top = df['Top'].min()
max_bottom = df['Bottom'].max()

# 生成完整的Top序列,步长0.5
full_top = pd.DataFrame({'Top': pd.arange(min_top, max_bottom + 0.5, 0.5)})

步骤3:匹配每个数值对应的Value

接下来我们要判断每个生成的Top值属于哪个原始区间,然后填充对应的Value,没有匹配到的就设为Nan:

# 定义一个函数,用来匹配每个Top值对应的Value
def match_value(row):
    # 找到满足「原始Top ≤ 当前Top ≤ 原始Bottom」的行
    matched_row = df[(df['Top'] <= row['Top']) & (df['Bottom'] >= row['Top'])]
    if not matched_row.empty:
        return matched_row['Value'].iloc[0]
    else:
        return pd.NA  # 如果你用的是旧版pandas,可以换成np.nan

# 把函数应用到full_top的每一行
full_top['Value'] = full_top.apply(match_value, axis=1)

步骤4:查看结果

现在打印full_top就能得到你想要的输出了:

print(full_top)

更高效的实现方式(用IntervalIndex)

如果你的数据量比较大,上面的apply方法可能有点慢,我们可以用pandas的IntervalIndex来快速匹配区间:

# 为原始数据创建区间索引
df['interval'] = pd.IntervalIndex.from_arrays(df['Top'], df['Bottom'], closed='both')

# 快速匹配每个Top值对应的Value
full_top['Value'] = full_top['Top'].apply(
    lambda x: df[df['interval'].contains(x)]['Value'].iloc[0] if any(df['interval'].contains(x)) else pd.NA
)

运行这段代码后,你就能得到和预期完全一致的输出啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 21:32:40