Python:根据其他两列的比较为DataFrame列元素赋值

2024-06-29 00:24:15 发布

您现在位置:Python中文网/ 问答频道 /正文

给定如下数据帧:

Desired DataFrame values for Quantile and Value columns

我有两个目标

  1. 为每个类别(a、b、c等)创建一个分位数,并将其分配给分位数列中的值

  2. 将得分列中的每一行与该组的相应分位数值进行比较。如果高于第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

Tags: dataframedfnpgroupwherepdscoregroupby