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

按行业分组并按总资产排序后计算pr_multi相关矩阵遇序乱问题

问题

我手里有11个行业共100家公司的数据,想先按行业分组,每个行业内按总资产(atq)降序排序,再计算pr_multi的相关系数矩阵。但执行排序和groupby操作后,结果总是按字母顺序排列,没法保留我设定的排序逻辑。

数据样例

indexdatafqtrticpr_multiatqindustry
02018Q1ANaN8698.04
12018Q2A-0.08568457281517358784.04
22018Q3A0.00351033207741468349.04
32018Q4A-0.01577326872602468541.04
42018Q1AALNaN53280.05
52018Q2AAL-0.269438029253271752622.05

当前使用的代码

data1=data18.sort_values(['atq'],ascending=False).groupby('industry').head()
df = data1.pivot_table('pr_multi', ['datafqtr'], 'tic')
# 用pandas内置函数计算相关系数矩阵
correlation_matrix = df.corr()
correlation_matrix.head()
解决方案
  • 问题出在两点:groupby('industry').head()不会保留分组内的排序结果;后续pivot_table会默认按tic的字母顺序排列列,最终导致相关矩阵顺序不符合预期。
  • 修正步骤:
    1. 先按行业分组,在每个组内单独按atq降序排序,同时保留排序后的顺序:
      # 分组后每个行业内按atq降序排序,重置索引避免混乱
      data1 = data18.groupby('industry', group_keys=False).apply(lambda x: x.sort_values('atq', ascending=False)).reset_index(drop=True)
      
    2. 提取去重后的tic列表,这个列表会保留行业内按atq降序的顺序:
      sorted_tics = data1['tic'].drop_duplicates().tolist()
      
    3. 生成透视表时,指定列顺序为刚才得到的sorted_tics,确保列的排序符合要求:
      df = data1.pivot_table('pr_multi', index='datafqtr', columns='tic')[sorted_tics]
      
    4. 再计算相关系数矩阵,此时矩阵的行和列都会严格遵循你设定的排序逻辑:
      correlation_matrix = df.corr()
      correlation_matrix.head()
      
  • 额外提示:如果需要把相关矩阵按行业分组展示,可以基于sorted_tics和行业对应关系,重新调整矩阵的行和列顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:15:59