gpt4 book ai didi

python - pandas groupby ID 然后在所有行的风险列中查找 'H' 字符的出现

转载 作者:行者123 更新时间:2023-11-30 22:15:36 25 4
gpt4 key购买 nike

我有一个 Pandas 数据框 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

我有一个非常大的数据框,那么我怎样才能有效地做到这一点?

最佳答案

首先找到 boolean indexing 的所有唯一ID然后将值替换为 numpy.wherelocisin :

v = df.loc[df['risk'] == 'H', 'ID'].unique()
df['risk'] = np.where(df['ID'].isin(v), 'H', df['risk'])

另一个解决方案:

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'])
<小时/>
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

关于python - pandas groupby ID 然后在所有行的风险列中查找 'H' 字符的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50231495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com