计算target
列,其默认值为1
,但当ID1中的组具有0
时为Yes
,例如在9
中是一个值为Yes
的值,我们想保留其他No
为0
的值
给定目标col是预期的答案
ID1 ID2 Match target
4 A10 Yes 1
4 A20 No 0
5 A30 Yes 1
6 A50 No 1
6 A60 No 1
7 A70 Yes 1
8 A60 No 1
9 A30 Yes 1
9 A20 No 0
9 A10 No 0
答案 0 :(得分:4)
您可以将Series.eq
与GroupBy.transform
进行比较,并将GroupBy.all
与仅具有No
值的测试组进行比较:
m1 = df['Match'].eq('No').groupby(df['ID1']).transform('all')
#or test not equal Yes
m1 = df['Match'].ne('Yes').groupby(df['ID1']).transform('all')
#alternative
#m1 = ~df['ID1'].isin(df.loc[df['Match'].ne('No'), 'ID1'])
m2 = df['Match'].eq('Yes')
df['target1'] = (m1 | m2).view('i1')
print (df)
ID1 ID2 Match target target1
0 4 A10 Yes 1 1
1 4 A20 No 0 0
2 5 A30 Yes 1 1
3 6 A50 No 1 1
4 6 A60 No 1 1
5 7 A70 Yes 1 1
6 8 A60 No 1 1
7 9 A30 Yes 1 1
8 9 A20 No 0 0
9 9 A10 No 0 0