首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫群按ID在所有行的risk列中查找“H”字符的出现

熊猫群按ID在所有行的risk列中查找“H”字符的出现
EN

Stack Overflow用户
提问于 2018-05-08 10:32:34
回答 1查看 40关注 0票数 1

我有一个示例:

代码语言:javascript
复制
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对数据进行分组,然后在risk列中查找“H”字符的出现。如果在特定ID的任何行中的risk列中存在任何'H‘,我想用'H’更改风险列中该特定ID的所有行。这就是我想得到的:

代码语言:javascript
复制
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

我有一个非常大的数据文件,所以我怎么能有效地做到这一点呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-08 10:35:13

首先通过boolean indexing查找所有唯一的boolean indexing,然后用numpy.wherelocisin替换值。

代码语言:javascript
复制
v = df.loc[df['risk'] == 'H', 'ID'].unique()
df['risk'] = np.where(df['ID'].isin(v), 'H', df['risk'])

另一种解决办法是:

代码语言:javascript
复制
df.loc[df['ID'].isin(df.loc[df['risk'] == 'H', 'ID'].unique()), 'risk'] = 'H'

和最慢的groupby解决方案

代码语言:javascript
复制
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'])
代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50231495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档