Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:根据其他两列的比较为DataFrame列元素赋值_Python_Pandas_Dataframe - Fatal编程技术网

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

Python:根据其他两列的比较为DataFrame列元素赋值,python,pandas,dataframe,Python,Pandas,Dataframe,给定一个数据帧,如下所示: 我有两个目标 为每个类别(a、b、c等)创建一个分位数,并将其分配给分位数列中的值 将分数列中的每一行与该组对应的分位数值进行比较。如果高于第90百分位,则将数字3指定给列值,高于第60百分位,则将数字2指定给列值,依此类推 到目前为止,我已经能够(以一种低效的方式)创建以下内容,但我确信必须有一种方法来提高效率: df = pd.read_excel("file.xlsx") conditions2 = (df['scaled_score']>=df['q

给定一个数据帧,如下所示:

我有两个目标

  • 为每个类别(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
    
    df=pd.read\u excel(“file.xlsx”)
    条件2=(df['scaled_score']>=df['quantiles2'])和(df['scaled_score']=df['quantiles3'])和(df['scaled_score']=df['quantiles3'])
    df['quantiles1']=df.groupby(['Group'])。标度分数。分位数(0.9)
    dfr1=np.式中(df['scaled_score']>=df['quantiles1'],0.5,0)
    df['quantiles2']=df.groupby(['Group'])。标度分数。分位数(0.7)
    dfr2=np.式中(条件2,0.35,0)
    df['quantiles3']=df.groupby(['Group'])。标度分数。分位数(0.5)
    dfr3=np.式中(条件3,0.25,0)
    df['quantiles4']=df.groupby(['Group'])。标度分数。分位数(0.4)
    dfr4=np.式中(条件4,0.15,0)
    dtest1=pd.数据帧(dfr1)
    dtest2=pd.数据帧(dfr2)
    dtest3=pd.数据帧(dfr3)
    dtest4=pd.数据帧(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.下降(['分位数'],轴=1)
    del df[‘分位数’,轴=1]
    dftest.index=df.index
    Panel2=df.join(dftest,on=df.index)
    df['Value']=dftest
    
    我会做
    qcut

    s=df.groupby('Value').apply(lambda x : pd.qcut(x['scaled_score'],[0,0.5,0.7,0.9,1],labels=[0.15,0.25,0.35,0.5])).reset_index(level=0,drop=True)
    df['New']=s
    

    你好!你有什么理由怀疑有更有效的方法吗?你觉得问题出在哪里?请解释一下@WeNYoBen