根据观察分位数分配指标

时间:2016-09-26 23:04:00

标签: python pandas numpy dataframe

我正在使用pandas DataFrame。我想在满足特定条件时将列指示符变量赋值为1。我计算特定组的分位数。如果该值超出分位数,我想将列指示符变量分配给1.例如,以下代码打印每个组的分位数:

df[df['LENGTH'] > 1].groupby(['CLIMATE', 'TEMP'])['LENGTH'].quantile(.95)]

现在我的数据框中的所有观察值都大于我想要设置的分组值

df['INDICATOR'] = 1

我尝试使用以下if语句:

if df.groupby(['CLIMATE','BIN'])['LENGTH'] > df[df['LENGTH'] > 1].groupby(['CLIMATE','BIN'])['LENGTH'].quantile(.95):
    df['INDICATOR'] = 1

这给了我错误:“ValueError:操作数不能与形状(269,)(269,2)一起广播”。任何帮助,将不胜感激!

1 个答案:

答案 0 :(得分:2)

您希望在groupby之后使用transform来获得等效大小的数组。 gt大于。 mul成倍增加。我乘以1得到从gt01的布尔结果。

考虑数据框df

df = pd.DataFrame(dict(labels=np.random.choice(list('abcde'), 100),
                       A=np.random.randn(100)))

我得到这样的指标

df.A.gt(df.groupby('labels').A.transform(pd.Series.quantile, q=.95)).mul(1)

在你的情况下,我做

df['INDICATOR'] = df['LENGTH'].gt(df.groupby(['CLIMATE','BIN'])['LENGTH'] \
                                    .transform(pd.Series.quantile, q=.95)).mul(1)