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

Python实现投资组合收益率数据分区间排序的方案咨询

实现方案

Python生态里用numpy或者pandas就能直接实现你的需求,不需要额外安装小众库,1万条数据处理效率完全够用,两种方案如下:


方法1:numpy实现(轻量快速,适合纯数值处理)

核心用np.histogram计算区间频数,np.digitize给数据打区间标签,后续直接算概率、排序都很方便。

import numpy as np

# 替换成你自己的收益率列表
returns = np.random.normal(0, 0.02, 10000)

# 区间划分两种可选方式:
# 方式1:指定划分多少个等宽区间,比如分10个区间
bin_count = 10
counts, bin_edges = np.histogram(returns, bins=bin_count)

# 方式2:手动指定区间边界,适合按业务规则划分,比如按收益率阈值分
# bin_edges = [-np.inf, -0.1, -0.05, -0.02, 0, 0.02, 0.05, 0.1, np.inf]
# counts, _ = np.histogram(returns, bins=bin_edges)

# 计算各区间对应概率
probabilities = counts / len(returns)
# 给每条数据打所属区间标签
bin_labels = np.digitize(returns, bins=bin_edges)
# 按区间对原数据排序
sorted_data = sorted(zip(returns, bin_labels), key=lambda x: x[1])

# 输出验证
print("区间边界:", bin_edges)
print("各区间样本数:", counts)
print("各区间概率:", probabilities)

方法2:pandas实现(可读性高,适合后续数据分析)

如果你的数据需要后续做分组统计、可视化,用pandas的cut/qcut分箱函数更便捷:

  • cut:支持等宽分箱、自定义边界分箱
  • qcut:等频分箱,每个区间样本数一致,适合收益率这类可能有偏态的分布,避免出现空区间
import pandas as pd
import numpy as np

returns = np.random.normal(0, 0.02, 10000)
df = pd.DataFrame(returns, columns=["return"])

# 等宽分10个区间
df["bin"] = pd.cut(df["return"], bins=10)
# 等频分10个区间(每个区间1000条数据)
# df["bin"] = pd.qcut(df["return"], q=10)

# 直接统计各区间概率,自动按区间排序
bin_prob = df["bin"].value_counts(normalize=True).sort_index()
print("各区间概率分布:\n", bin_prob)

# 按区间对整个数据集排序
sorted_df = df.sort_values("bin")

内容的提问来源于stack exchange,提问作者Gonçalo Sassetti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:54:07