Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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 然后按ID分组查找';H';所有行的风险列中的字符_Python_Pandas_Pandas Groupby - Fatal编程技术网

Python 然后按ID分组查找';H';所有行的风险列中的字符

Python 然后按ID分组查找';H';所有行的风险列中的字符,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个数据帧df示例: ID risk 1111 H 1111 H 1111 L 1111 L 1112 L 1112 L 1113 H 1113 L 1113 H 1113 H 1113 H 1114 L 1114 L 1114 L 1114 L 我想根据ID对数据进行分组,然后在“风险”列中查找出现的“H”字符。如果在特定ID的任何行的风险列中存在任何“H”,我想将风险列中该特定ID的所有行更改为“H”。这就是我想要的: ID risk 1111

我有一个数据帧df示例:

ID    risk
1111  H
1111  H
1111  L
1111  L
1112  L
1112  L
1113  H
1113  L
1113  H
1113  H
1113  H
1114  L
1114  L
1114  L
1114  L
我想根据ID对数据进行分组,然后在“风险”列中查找出现的“H”字符。如果在特定ID的任何行的风险列中存在任何“H”,我想将风险列中该特定ID的所有行更改为“H”。这就是我想要的:

ID    risk
1111  H
1111  H
1111  H
1111  H
1112  L
1112  L
1113  H
1113  H
1113  H
1113  H
1113  H
1114  L
1114  L
1114  L
1114  L

我有一个非常大的数据框架,所以我如何才能有效地做到这一点

首先查找所有唯一的
ID
by,然后将值替换为或
loc
和:

另一个解决方案:

df.loc[df['ID'].isin(df.loc[df['risk'] == 'H', 'ID'].unique()), 'risk'] = 'H'
使用
groupby
的最慢解决方案:

m = df.groupby('ID')['risk'].transform(lambda x: (x == 'H').any())
#better groupby alternative
#m = df['risk'].eq('H').groupby(df['ID']).transform('any')
df['risk'] = np.where(m, 'H', df['risk'])


谢谢,这个很好用。我尝试了你的第二个解决方案(一行),效果很好。谢谢
m = df.groupby('ID')['risk'].transform(lambda x: (x == 'H').any())
#better groupby alternative
#m = df['risk'].eq('H').groupby(df['ID']).transform('any')
df['risk'] = np.where(m, 'H', df['risk'])
print (df)
      ID risk
0   1111    H
1   1111    H
2   1111    H
3   1111    H
4   1112    L
5   1112    L
6   1113    H
7   1113    H
8   1113    H
9   1113    H
10  1113    H
11  1114    L
12  1114    L
13  1114    L
14  1114    L