给定如下数据帧:
Desired DataFrame values for Quantile and Value columns
我有两个目标
为每个类别(a、b、c等)创建一个分位数,并将其分配给分位数列中的值
将得分列中的每一行与该组的相应分位数值进行比较。如果高于第90百分位,则将数字3指定给列值,高于第60百分位,则将数字2指定给列值,依此类推
到目前为止,我已经能够(以一种低效的方式)创建以下内容,但我确信一定有一种方法可以使其更高效:
df = pd.read_excel("file.xlsx")
conditions2 = (df['scaled_score']>=df['quantiles2']) & (df['scaled_score']<df['quantiles1'])
conditions3 = (df['scaled_score']>=df['quantiles3']) & (df['scaled_score']<df['quantiles2'])
conditions4 = (df['scaled_score']>=df['quantiles3'])
df['quantiles1'] = df.groupby([‘Group']).scaled_score.quantile(0.9)
dfr1 = np.where(df['scaled_score']>=df['quantiles1'] ,0.5,0)
df['quantiles2'] = df.groupby([‘Group']).scaled_score.quantile(0.7)
dfr2 = np.where(conditions2 ,0.35,0)
df['quantiles3'] = df.groupby([‘Group']).scaled_score.quantile(0.5)
dfr3 = np.where(conditions3,0.25,0)
df['quantiles4'] = df.groupby([‘Group']).scaled_score.quantile(0.4)
dfr4 = np.where(conditions4,0.15,0)
dtest1=pd.DataFrame(dfr1)
dtest2=pd.DataFrame(dfr2)
dtest3=pd.DataFrame(dfr3)
dtest4=pd.DataFrame(dfr4)
dftest = pd.concat([dtest1,dtest2]).groupby(level=0).max()
dftest = pd.concat([dftest,dtest3]).groupby(level=0).max()
dftest = pd.concat([dftest,dtest4]).groupby(level=0).max()
df.drop(['quantile'],axis=1)
del df[‘quantile’, axis=1]
dftest.index=df.index
Panel2 = df.join(dftest, on=df.index)
df[‘Value'] = dftest
我会做
qcut
相关问题 更多 >
编程相关推荐