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

Python中对API返回的订单簿浮点列表数据分组求和

Python精简订单簿数据:按整数价格合并数量求和

嘿,我来帮你搞定这个订单簿数据精简的问题!先理清楚你的需求:把每个价格取整数部分,然后把相同整数价格对应的数量加起来,最后输出成指定的列表格式对吧?给你几个简洁易上手的实现方法,从基础到进阶都有:

首先先回顾下你的原始数据(片段):

myData = [[9656.37, 0.063], [9656.32, 0.688], [9656.21, 0.729], [9656.07, 0.618], [9656.01, 0.598], [9656.0, 0.917], [9655.92, 0.417], ...]  # 完整列表约999个元素

方法1:普通字典实现(新手友好,无需额外模块)

这个方法逻辑直白,容易理解,不用装任何额外库:

# 初始化空字典,键存整数价格,值存对应数量的总和
price_total = {}

for price, qty in myData:
    # 取价格的整数部分(因为订单价格都是正数,用int()直接截断小数就行)
    int_price = int(price)
    # 检查这个整数价格是否已经在字典里
    if int_price in price_total:
        price_total[int_price] += qty
    else:
        price_total[int_price] = qty

# 把字典转换成你要的[[价格, 总数量]]格式
result = [[price, total_qty] for price, total_qty in price_total.items()]
# 如果想保持和原数据一样的价格从高到低排序,加上这行
result.sort(reverse=True)

方法2:用collections.defaultdict简化代码

Python标准库的collections模块里的defaultdict可以帮你省去判断键是否存在的步骤,代码更简洁:

from collections import defaultdict

# 初始化一个默认值为0.0的字典
price_total = defaultdict(float)

for price, qty in myData:
    # 直接累加就行,不存在的键会自动初始化为0.0
    price_total[int(price)] += qty

# 转成列表并可选排序
result = sorted([[k, v] for k, v in price_total.items()], reverse=True)

方法3:Pandas(大数据量首选,高效便捷)

如果你的数据量特别大(比如几千上万条),用Pandas的分组功能会比循环快很多,代码也很清爽:

import pandas as pd

# 把原始数据转成DataFrame表格格式
df = pd.DataFrame(myData, columns=["price", "quantity"])
# 新增一列存整数价格
df["int_price"] = df["price"].astype(int)
# 按整数价格分组,对数量求和
summed_df = df.groupby("int_price")["quantity"].sum().reset_index()
# 转成你需要的列表格式
result = summed_df.values.tolist()
# 可选:按价格降序排序
result.sort(reverse=True)

小提示:

  • 关于取整数:如果你的价格可能出现负数(虽然订单簿一般不会),int()是向0截断,比如int(-9656.37)会得到-9656;如果需要向下取整可以用math.floor(),但订单场景下int()完全够用。
  • 排序:原数据是按价格从高到低排列的,所以最后加上排序可以保持一致,不需要的话可以去掉sorted或sort步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:32:54