如何按元组键的时间间隔值拆分含加密货币行情的字典/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
相关产品推荐
相关产品推荐

