我有一个示例:
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的所有行。这就是我想得到的:
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我有一个非常大的数据文件,所以我怎么能有效地做到这一点呢?
发布于 2018-05-08 10:35:13
首先通过boolean indexing查找所有唯一的boolean indexing,然后用numpy.where或loc和isin替换值。
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 Lhttps://stackoverflow.com/questions/50231495
复制相似问题