Pandas 数据框中时间序列的十等分排名

Decile Ranking for Time-Series in Pandas Dataframe

我有一个如下所示的 pandas 数据框,我正在尝试获取每列行的十分位数排名,然后为数据框中的每个特征创建一个新列:

我不确定我是否解释得很好,但我最终想生成一个如下所示的数据框:

您可以使用 qcut - https://pandas.pydata.org/docs/reference/api/pandas.qcut.html

编辑:如果您想获得与该行相关的结果(如下面的评论中指定),您可以使用应用(并添加后缀重命名列),例如:

test = pd.DataFrame({"a": [-0.1095, 0.1801, 0.0623, 0.1003, -0.0725],
                     "b": [-0.1895, 0.2001, 0.0523, 0.1203, -0.0225],
                     "c": [-0.0695, 0.2121, 0.1023, 0.2023, -0.0325],
                     "d": [-0.0495, 0.2401, 0.1223, 0.1603, -0.0125]},
                index = ["11/30/1984", "12/31/1984", "1/31/1985", "2/26/1985", "3/31/1985"])

test2 = test.apply(lambda x: pd.qcut(x, 10, duplicates='drop', labels = False), axis=1)\
            .add_suffix('_decile_row')

pd.concat([test, test_2], axis=1)

这将产生:

            a       b       c       d       a_decile_row    b_decile_row    c_decile_row    d_decile_row
11/30/1984  -0.110  -0.190  -0.070  -0.050  3               0               6               9
12/31/1984  0.180   0.200   0.212   0.240   0               3               6               9
1/31/1985   0.062   0.052   0.102   0.122   3               0               6               9
2/26/1985   0.100   0.120   0.202   0.160   0               3               9               6
3/31/1985   -0.072  -0.022  -0.033  -0.013  0               6               3               9