我正在使用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)一起广播”。任何帮助,将不胜感激!
答案 0 :(得分:2)
您希望在groupby
之后使用transform
来获得等效大小的数组。 gt
大于。 mul
成倍增加。我乘以1
得到从gt
到0
或1
的布尔结果。
考虑数据框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)