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