如何使用 Pandas 有效地将值分箱到重叠的分箱中?

How do I efficiently bin values into overlapping bins using Pandas?

我想将浮点型列中的所有值分到重叠的分箱中。结果列可能是一系列带有布尔值的一维向量 - 原始列中的每个值对应一个向量。结果向量包含 True 每个 bin 值落入和 False 其他 bins。

例如,如果我有四个 bins [(0, 10), (7, 20), (15, 30), (30, 60)],并且原始值为 9.5,则生成的向量应该是 [True, True, False, False].

我知道如何使用自定义函数遍历所有范围 'apply',但是有没有办法更高效、更简洁地执行此分箱?

一个简单的列表理解能满足您的需求吗?

Bins = [(0, 10), (7, 20), (15, 30), (30, 60)]
Result = [((9.5>=y[0])&(9.5<=y[1])) for y in Bins]

如果您的数据存储在 pandas DataFrame (df) 的 data 列中,那么您可以定义函数:

def in_ranges(x,bins):
    return [((x>=y[0])&(x<=y[1])) for y in bins]

并将其应用于列:

df[data].apply(lambda x: pd.Series(in_ranges(x,Bins),Bins))