在链操作中重命名数据帧的索引

2024-09-28 01:24:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图对我的数据计算Jarque Bera Bera检验(正态性检验),结果如下(链式操作后):

Data:

ranking Q1  Q2  Q3  Q4
Date                
2009-12-29  nan nan nan nan
2009-12-30  0.12    -0.21   -0.36   -0.39
2009-12-31  0.05    0.09    0.06    -0.02
2010-01-01  nan nan nan nan
2010-01-04  1.45    1.90    1.81    1.77
... ... ... ... ...
2020-10-13  -0.67   -0.59   -0.63   -0.61
2020-10-14  -0.05   -0.12   -0.05   -0.13
2020-10-15  -1.91   -1.62   -1.78   -1.91
2020-10-16  1.21    1.13    1.09    1.37
2020-10-19  -0.03   0.01    0.06    -0.02

我使用这样的函数:

(data
 .sort_values('Date')
 .groupby([pd.Grouper(key='Date', freq='B'), 'ranking'])
 ['perf_corr']
 .apply(lambda x: x.mean()*100)
 .unstack()
 .agg([lambda x: x.mean(),
       lambda x: np.sqrt(x.var()),
       lambda x: x.skew(),
       lambda x: x.kurtosis(),
  ])
)

输出为:

    Q1  Q2  Q3  Q4
<lambda>    8.89    9.20    7.63    7.30
<lambda>    15.77   16.19   16.93   17.59
<lambda>    -1.04   -0.95   -0.79   -0.61
...

我的问题很简单,如何在我的链计算中替换为“mean”、“std”、“skew”…(我还计算其他函数)? 在新版本之前,lambda函数是<;lambda_1>;,。。。所以我用了:

.rename(index={'lambda_1': "mean"})

但现在已经不可能了

有没有继续的想法


Tags: 数据lambda函数datenanmean链式q3
2条回答

解决方案

在管道前列出所需的行名称:

idx_names = ["mean", "std", "skew", "kurtosis"]  # can be more

并在.agg()之后将其链接

.reset_index(drop=True).rename(dict(zip(range(len(idx_names)), idx_names)))

解释

将索引恢复为[0,1,2,…],并创建一个字典,将这些数字映射到所需的列名。在上面的示例中,映射字典看起来像{0: "mean, 1: "std", 2: "skew", 3: "kurtosis"}

我还发现了一个解决方案:

data.set_axis(['mean','std'],axis='index')

它是有效的

相关问题 更多 >

    热门问题