首页 > 解决方案 > 如何将列表中的值分配给数据框中的一组值?

问题描述

我有一个包含 10 个值的数据,我想根据它们的百分比来分配它们。

我的数据:

    stock    value

    s_001   -0.001932
    s_002    0.004001
    s_003    0.001323
    s_004   -0.006785
    s_005    0.004405
    s_006   -0.002872
    s_007    0.003101
    s_008    0.001383
    s_009   -0.004785
    s_010    0.001405

百分位数:

    breakpoints = [0, 20, 40, 60, 80]

我使用 df.sort_values 根据时间顺序对值进行排序:

    stock    value

    s_001   -0.001932        
    s_006   -0.002872
    s_009   -0.004785
    s_004   -0.006785
    s_003    0.001323
    s_008    0.001383
    s_010    0.001405
    s_007    0.003101
    s_002    0.004001
    s_005    0.004405

排序后,如何将前两个值分配给第一个百分位数,然后将接下来的两个值分配给第二个百分位数,依此类推?

标签: pythonpandasdataframe

解决方案


您可以使用pandas.qcut. 您将需要断点为 0 和 1 之间的数字:

breakpoints = [0. , 0.2, 0.4, 0.6, 0.8]
df['quantile'] = pd.qcut(df['value'],
                         breakpoints+[1],
                         labels=[int(i*100) for i in breakpoints]
                         )

注意。不需要为此对数据框进行排序

输出:

   stock     value quantile
0  s_001 -0.001932       20
1  s_002  0.004001       80
2  s_003  0.001323       40
3  s_004 -0.006785        0
4  s_005  0.004405       80
5  s_006 -0.002872       20
6  s_007  0.003101       60
7  s_008  0.001383       40
8  s_009 -0.004785        0
9  s_010  0.001405       60

推荐阅读