如何使用 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))
我想将浮点型列中的所有值分到重叠的分箱中。结果列可能是一系列带有布尔值的一维向量 - 原始列中的每个值对应一个向量。结果向量包含 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))