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
我有一个如下所示的 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