检查列的一个行值,并将该特定值应用于所有行

  • 本文关键字:应用于 一个 python pandas
  • 更新时间 :
  • 英文 :


我有一个表

否否否是否
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.whereDataFrame.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')

最新更新