如何检测DataFrame中股票聚类的时间变化及统计最大/最小变化次数
检测股票聚类变化及统计变化次数的方法
假设你使用Pandas处理聚类结果DataFrame(行是股票代码symbol,列是按时间排序的日期,值为聚类标签),以下是具体实现步骤:
1. 确保日期列按时间排序
如果你的日期列未按时间顺序排列,先执行排序:
import pandas as pd # 假设聚类结果存储在cluster_df中 cluster_df = cluster_df.sort_index(axis=1)
2. 计算每只股票的聚类变化次数
对每一行(单只股票)计算相邻日期的聚类标签差异,统计标签发生变化的次数:
# 计算相邻日期的聚类标签差异,统计非零差异的数量(即变化次数) change_counts = cluster_df.diff(axis=1).ne(0).sum(axis=1)
diff(axis=1):按行计算相邻列(日期)的标签差值,第一列会生成NaNne(0):筛选出差值不为0的位置(即聚类发生变化的日期点)sum(axis=1):对每一行求和,得到该股票的总变化次数
3. 筛选聚类发生变化的股票
直接提取变化次数大于0的股票代码:
changed_stocks = change_counts[change_counts > 0].index.tolist() print("聚类发生变化的股票:", changed_stocks)
4. 统计变化次数的最大值和最小值
对变化次数序列直接调用聚合函数:
max_change = change_counts.max() min_change = change_counts.min() print(f"所有股票聚类变化次数的最大值:{max_change}") print(f"所有股票聚类变化次数的最小值:{min_change}")
示例验证(基于你提供的样本数据)
以AAPL为例,其聚类标签序列为:3→4→1→4→0→0→0→1→2→3→1→1,相邻对比共11次,其中8次标签发生变化,对应change_counts['AAPL'] = 8,与代码计算结果一致。
内容的提问来源于stack exchange,提问作者Ryan Shuell
相关产品推荐
相关产品推荐

