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

如何优化自定义PCA函数以消除分组后多余索引列

解决方案

修改你的自定义PCA函数,确保返回和输入组数据索引对齐的一维Series,就能避免多余空索引的问题:

import scipy.stats as stats
import numpy as np
import pandas as pd

def pca(data):
    try:
        x = stats.zscore(data, nan_policy='omit')
        covar = np.cov(x, rowvar=False)
        eigval, eigvec = np.linalg.eig(covar)
    except Exception as e:
        # 返回与输入数据索引完全对齐的NaN序列
        return pd.Series([np.NaN]*len(data), index=data.index)
    else:
        # 把二维计算结果转为一维,再生成带原索引的Series
        pca_result = (x @ eigvec[:, :1]).flatten()
        return pd.Series(pca_result, index=data.index)

关键修改说明

  • 异常分支:给返回的NaN序列指定了输入数据的索引,保证分组后结果能和原数据精准对齐,不会乱序。
  • 正常分支:矩阵乘法原本会得到(n,1)的二维数组,用flatten()压成一维后再转成Series,避免返回二维结构(比如单列DataFrame)导致的多余索引层级。

调用方式

用transform替代apply,直接得到和原数据集索引对齐的结果,形式和groupby['col'].transform('mean')完全一致:

sam['pca_first_component'] = sam.groupby('gvkey')[['xgat', 'xgsale', 'xcap']].transform(pca)

这样处理后,结果会直接作为新列添加到原数据中,不会出现多余的空索引列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:27:15