Python 3.x id级别上的条件复制

Python 3.x id级别上的条件复制,python-3.x,pandas,group-by,Python 3.x,Pandas,Group By,我有一个数据框,看起来像: ID VALUE 1 Low 1 High 1 Medium 1 Very_High 2 Low 2 Medium 2 Medium 我希望遍历每个ID级别并应用某些条件,转换列值。 条件是: 一,。如果该ID的任何行中存在“非常高”,则将该ID的所有行设置为“非常高” 二,。否则,如果该ID的任何

我有一个数据框,看起来像:

ID   VALUE        
1     Low         
1     High        
1     Medium      
1     Very_High   
2     Low         
2     Medium      
2     Medium      
我希望遍历每个ID级别并应用某些条件,转换列值。 条件是:

一,。如果该ID的任何行中存在“非常高”,则将该ID的所有行设置为“非常高”

二,。否则,如果该ID的任何行中存在“高”,则将该ID的所有行设置为“高”

iii.否则,如果该ID的任何行中存在“中”,则将该ID的所有行设为“中”

iv.否则将ID中的行设置为“低”

预期数据帧结果:

ID   VALUE
1    Very_High
1    Very_High
1    Very_High
1    Very_High
2    Medium
2    Medium
2    Medium
这是我尝试过但不起作用的:

if (df_new.groupby('ID')['VALUE']=='Very_High').any():
    df_new = df_new.loc[df_new.groupby('ID')['VALUE'] == 'Very_High'].copy()
elif (df_new.groupby('ID')['VALUE'] =='High').any():
    df_new = df_new.loc[df_new.groupby('ID')['VALUE'] == 'High'].copy()
elif (df_new.groupby('ID')['VALUE']=='Medium').any():
    df_new = df_new.loc[df_new.groupby('ID')['VALUE'] == 'Medium'].copy()
else: 
    df_new = df_new.loc[df_new.groupby('ID')['VALUE'] == 'Low'].copy()

我们可以做
分类
,然后
合并

df.VALUE=pd.Categorical(df.VALUE, ['Low','Medium','High','Very_High'], ordered=True)
df=df.drop('VALUE', 1).merge(df.sort_values('VALUE').drop_duplicates('ID',keep='last'),how='left', on ='ID')
Out[244]: 
   ID      VALUE
0   1  Very_High
1   1  Very_High
2   1  Very_High
3   1  Very_High
4   2     Medium
5   2     Medium
6   2     Medium