Python 如果groupby熊猫内的条件
计算目标列,其中默认值为1,但当ID1中的组有一个“是”时,该值为0。例如,在9中,有一个值为“是”,我们希望将另一个“否”保留为0 给定目标col是期望的答案Python 如果groupby熊猫内的条件,python,pandas,numpy,data-manipulation,Python,Pandas,Numpy,Data Manipulation,计算目标列,其中默认值为1,但当ID1中的组有一个“是”时,该值为0。例如,在9中,有一个值为“是”,我们希望将另一个“否”保留为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
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
您可以使用“与比较”和“仅用于无值的测试组”:
有一点模棱两可的问题。那么,本质上你是在尝试将每个“是”映射到1,将“否”映射到0吗?目标列是否为您期望的列?是,给定的目标列是期望的答案。如果ID1列中有6,则否为1,因为6没有是
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