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

如何按元组键的时间间隔值拆分含加密货币行情的字典/DataFrame

解决方案

以下两种方法都可以实现需求,可根据你的实际使用场景选择:

方法1:先拆分原始字典再生成DataFrame(推荐)

直接按键元组的第二个元素(时间间隔)筛选字典条目,再单独转DataFrame,不会产生冗余空值:

import pandas as pd

# 你的原始字典
raw_dict = {
    ('BTCUSDT', '3m', 'high'): [60607.54, 60642.85, 60548.8, 60663.06, '60672.13000000'],
    ('BTCUSDT', '3m', 'low'): [60524.07, 60488.83, 60441.21, 60400.0, '60507.84000000'],
    ('BTCUSDT', '3m', 'close'): [60556.68, 60500.48, 60470.65, 60636.97, '60530.13000000'],
    ('BTCUSDT', '1m', 'high'): [60473.25, 60534.04, 60663.06, 60672.13, '60624.06000000', '60582.67000000', '60571.22000000'],
    ('BTCUSDT', '1m', 'low'): [60400.0, 60434.62, 60520.5, 60600.0, '60548.88000000', '60507.84000000', '60530.13000000'],
    ('BTCUSDT', '1m', 'close'): [60450.75, 60524.53, 60636.97, 60606.02, '60576.00000000', '60530.13000000', '60562.95000000']
}

# 筛选1分钟和3分钟的独立字典
dict_1m = {k: v for k, v in raw_dict.items() if k[1] == '1m'}
dict_3m = {k: v for k, v in raw_dict.items() if k[1] == '3m'}

# 转成DataFrame,可自定义列名
df_1m = pd.DataFrame(dict_1m)
df_1m.columns = [k[2] for k in dict_1m.keys()]  # 列名改为high/low/close,方便使用

df_3m = pd.DataFrame(dict_3m)
df_3m.columns = [k[2] for k in dict_3m.keys()]

方法2:从全量DataFrame中拆分

如果你已经生成了包含所有时间间隔的全量DataFrame(存在空值),可以直接按多级列索引拆分:

# 生成全量MultiIndex列DataFrame
df_full = pd.DataFrame(raw_dict)

# 按时间间隔拆分
df_1m = df_full.xs('1m', level=1, axis=1).dropna()
df_3m = df_full.xs('3m', level=1, axis=1).dropna()

# 同样可以修改列名
df_1m.columns = [col for col in df_1m.columns.get_level_values(2)]
df_3m.columns = [col for col in df_3m.columns.get_level_values(2)]

额外优化建议

你的数据中存在字符串格式的数值,转换为浮点型更方便后续行情计算:

df_1m = df_1m.astype(float)
df_3m = df_3m.astype(float)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:54:03