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

如何用Deedle在C#中实现Python Pandas的OHLC重采样及列命名

解决方案:用Deedle实现Pandas式的OHLC重采样逻辑

1. 读取CSV并自定义列名

Deedle读取无表头的CSV时,可通过Frame.ReadCsv的columns参数直接指定列名,避免默认的Column0/Column1这类自动命名:

using Deedle;
using System;

// 定义与原Python代码对应的列名
string[] columnNames = { "id", "price", "qty", "quoteQty", "time", "makerBuy", "bestPrice" };
var df = Frame.ReadCsv("ETHUSDT-trades-2022-12-16.csv", hasHeaders: false, columns: columnNames);

2. 转换时间戳并设置为索引

将毫秒级Unix时间戳转换为DateTime类型,再将其设为DataFrame的索引(对应原Python的set_index操作):

// 把time列的毫秒时间戳转换为DateTime
var timeSeries = df["time"].Select(x => DateTimeOffset.FromUnixTimeMilliseconds((long)x).DateTime);
// 将time列设为索引,并移除原列
df = df.IndexRowsWith(timeSeries).DropColumn("time");

3. 按240分钟周期重采样生成OHLC数据

使用Deedle的ResampleTime方法按固定时间间隔重采样,通过Aggregate方法指定OHLC四个维度的聚合逻辑:

// 获取价格列(转成double类型确保数值计算正常)
var priceSeries = df["price"].Cast<double>();

// 按240分钟周期重采样,生成OHLC数据
var ohlcFrame = priceSeries.ResampleTime(TimeSpan.FromMinutes(240))
    .Aggregate(
        open: s => s.FirstValue(),
        high: s => s.Max(),
        low: s => s.Min(),
        close: s => s.LastValue()
    );

// 打印结果
ohlcFrame.Print();

完整整合代码

using Deedle;
using System;

class Program
{
    static void Main()
    {
        // 1. 读取CSV并设置列名
        string[] columnNames = { "id", "price", "qty", "quoteQty", "time", "makerBuy", "bestPrice" };
        var df = Frame.ReadCsv("ETHUSDT-trades-2022-12-16.csv", hasHeaders: false, columns: columnNames);

        // 2. 转换时间戳并设置为索引
        var timeSeries = df["time"].Select(x => DateTimeOffset.FromUnixTimeMilliseconds((long)x).DateTime);
        df = df.IndexRowsWith(timeSeries).DropColumn("time");

        // 3. 重采样生成OHLC
        var priceSeries = df["price"].Cast<double>();
        var ohlcFrame = priceSeries.ResampleTime(TimeSpan.FromMinutes(240))
            .Aggregate(
                open: s => s.FirstValue(),
                high: s => s.Max(),
                low: s => s.Min(),
                close: s => s.LastValue()
            );

        ohlcFrame.Print();
    }
}

关键对应关系说明

  • 原Python的names参数 → Deedle的columns参数,用于自定义列名
  • 原Python的pd.to_datetime(df["time"], unit="ms") → DateTimeOffset.FromUnixTimeMilliseconds,实现毫秒时间戳转DateTime
  • 原Python的df.set_index("time") → df.IndexRowsWith(timeSeries),将时间列设为索引
  • 原Python的resample("240T").agg(...) → ResampleTime(TimeSpan.FromMinutes(240)).Aggregate(...),按固定周期聚合生成OHLC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 12:21:00