【发布时间】:2019-12-25 21:39:08
【问题描述】:
我有一个包含数十万行的df,并且正在创建一个新的数据框,它只包含某些值组的前分位数:
quantiles = (df.groupby(['Person', 'Date'])['Value'].apply(lambda x: pd.qcut(x, 4, labels=[0, 0.25, 0.5, 1], duplicates='drop')))
当我运行它时,我得到:
ValueError: Bin labels must be one fewer than the number of bin edges
尝试将bins 的数量更改为5 后,我仍然收到相同的错误。
我该如何解决这个问题?
【问题讨论】:
-
不要指定标签。通过删除重复项,您无法保证返回的 bin 数量,因此尝试使用固定长度列表标记它们会导致错误。
-
啊,我明白了。但是之后我将如何选择最高分位数呢?以前我有:
top_quantile_df = df[quantiles.eq(1)],但在我放弃labels参数后,我得到IndexError: index 0 is out of bounds for axis 0 with size 0 -
如果您使用
labels=False,它将使用从0开始的整数标记它们。然后,您需要随后屏蔽每组的最大值 -
抱歉,但我不确定我是否遵循您所说的每组最多掩码的意思。我真的不需要每个组/箱的最大限制 - 真的只想要该特定组的顶部
Value分位数。