我有一个表
键 | Seq | 真 |
---|---|---|
1001 | 是 | |
1001 | 2 | 否 |
1001 | 3 | 否|
1002 | 1 | 否 |
1002 | 2 | 否|
1002 | 3 | 否|
14002 | 1 | 是|
14002 | 2 | 否 |
14002 | 3 | 否|
14002 | 4 | 否 |
如果至少有一个值与Yes
匹配,则可以检查True
,对于匹配的密钥,则可以通过Series.isin
检查原始列Key
的最终掩码,然后在numpy.where
或DataFrame.loc
:中设置列
df['True'] = np.where(df['Key'].isin(df.loc[df['True'].eq('Yes'), 'Key']), 'Yes', 'No')
#alternatives
#df.loc[df['Key'].isin(df.loc[df['True'].eq('Yes'), 'Key']), 'True'] = 'Yes'
#df.loc[df['True'].eq('Yes').groupby(df['Key']).transform('any'), 'True'] = 'Yes'
print (df)
Key Seq True
0 11001 1 Yes
1 11001 2 Yes
2 11001 3 Yes
3 12002 1 No
4 12002 2 No
5 12002 3 No
6 14002 1 Yes
7 14002 2 Yes
8 14002 3 Yes
9 14002 4 Yes
或者,如果只有Yes/No
值,则可以通过GroupBy.transform
:获得每组的最大值
df['True'] = df.groupby('Key')['True'].transform('max')