基金分层统计:基于 FCT 分位数的收益率分组分析

问题描述:

现有基金的面板数据 df,结构为一支基金的时序数据、另一支基金的时序数据...,里面有每支基金对应时间的 'fct'、'rtn' 的指标,现在需要对数据进行分层统计处理:对于每个时间的所有基金的 'fct' 值进行分层,最高~最低共 6 组,对于每个时间每组内计算组内所有基金的 'rtn' 数据的平均值作为该组在那个时间的 'rtn' 指标,最后得到一个 df,columns 为 0、1、2、3、4、5,index 为 'time',第一列相当于每个时间点上 'fct' 值最低的 1/6 的基金组的平均 'rtn' 值的时间序列。

代码实现:

import numpy as np
import pandas as pd

# 假设 df 的结构为:基金 1 的 'fct' 和 'rtn'、基金 2 的 'fct' 和 'rtn'、...,每列的名称为 fund_x_fct、fund_x_rtn
# 其中 x 为基金编号

# 计算每个时间点上 'fct' 的分位数,并按照分位数进行分组
quantiles = df.filter(like='_fct').apply(lambda x: pd.qcut(x, q=6, labels=False, duplicates='drop'), axis=1)
rtn = df.filter(like='_rtn')

# 对于每个时间点上的每个分组,计算该组内所有基金的 'rtn' 平均值
rtn_grouped = rtn.groupby([quantiles, rtn.columns // 2], axis=1).mean()

# 重新命名列名
rtn_grouped.columns = range(6)
rtn_grouped.index.name = 'time'

# 转置结果,使得列名为 0~5,行名为时间序列
rtn_grouped = rtn_grouped.T

代码解释:

  1. 首先使用 filter() 方法选取所有 'fct' 列,然后使用 apply() 方法对每行数据进行分位数计算,得到一个包含每个时间点上 'fct' 分位数的 DataFrame。
  2. 使用 filter() 方法选取所有 'rtn' 列,然后使用 groupby() 方法按照 'fct' 分位数和基金编号进行分组,计算每个分组内所有基金的 'rtn' 平均值,得到一个新的 DataFrame。
  3. 重新命名列名和行名,使得结果符合要求。

总结:

以上代码实现了对基金数据按照 'fct' 分位数进行分层统计,并计算每个分组的平均收益率。这可以帮助投资者了解不同 'fct' 水平的基金在不同时间段内的收益表现。

基金分层统计:基于 FCT 分位数的收益率分组分析

原文地址: https://www.cveoy.top/t/topic/oc6i 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录