Pandas:如何创建一个基于扩展分位数的类别?

2024-04-25 01:25:55 发布

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

在dataframe中有一个数值列,我需要根据它的值对该行进行分类。例如

id   value
1    2.0
2    3.0
3    4.5
4    5.5

我需要一个新的类别变量group,它基于该行之前的行的分位数值。因此,对于id=2,它将在分位数计算中考虑第1行和第2行。然后进行分类,如:

^{pr2}$

我怎么计算分位数并做比较呢?在


Tags: iddataframevaluegroup分类类别数值位数
1条回答
网友
1楼 · 发布于 2024-04-25 01:25:55

也许我不太理解这个问题,但是因为你的级数总是在增加,最后一个值的分位数总是1。所以产量应该一直“非常高”。在

这不是超高效的,因为我为每个迭代创建一个系列,但它确实起到了作用。你可以用scipy中的一些东西来改变apply函数来计算百分位,这样可以加快这个过程

这是因为DataFrame.expanding()没有rank()方法。如果这是可能的话,那将是非常直截了当的。在

def ranking(x):
    return pd.Series(x).rank(pct=True).values[-1]

ranked = sx.expanding().apply(lambda x: ranking(x))
pd.cut(ranked, (0, 0.25, 0.75, 0.90, 1), labels=['low', 'Normal', 'High', 'Very High'])
Out[97]: 
0    Very High
1    Very High
2    Very High
3    Very High
dtype: category
Categories (4, object): [low < Normal < High < Very High]

具有scipy依赖关系的更快的解决方案:

^{pr2}$

相关问题 更多 >