我想将float类型的所有值都绑定到重叠的bin中。得到的列可以是一系列带有bool的1-D向量 - 来自原始列的每个值的一个向量。生成的向量包含True
,每个bin都包含一个值,False
包含其他bin。
例如,如果我有四个分档[(0, 10), (7, 20), (15, 30), (30, 60)]
,原始值为9.5,则生成的矢量应为[True, True, False, False]
。
我知道如何使用'apply'使用自定义函数遍历所有范围,但有没有办法更有效,更简洁地执行此分区?
答案 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))