如何使用Pandas有效地将值分成重叠的区域?

时间:2017-05-16 15:29:10

标签: python pandas binning

我想将float类型的所有值都绑定到重叠的bin中。得到的列可以是一系列带有bool的1-D向量 - 来自原始列的每个值的一个向量。生成的向量包含True,每个bin都包含一个值,False包含其他bin。

例如,如果我有四个分档[(0, 10), (7, 20), (15, 30), (30, 60)],原始值为9.5,则生成的矢量应为[True, True, False, False]

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

1 个答案:

答案 0 :(得分:2)

简单的列表理解是否符合您的需求?

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

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

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))