使用pandas组内的多个条件检查值是否存在

gib*_*z00 6 python numpy pandas

以下是我的数据框的样子。Expected_Output是我想要的/目标列。

   Group  Value1  Value2  Expected_Output
0      1       3       9             True
1      1       7       6             True
2      1       9       7             True
3      2       3       8            False
4      2       8       5            False
5      2       7       6            False
Run Code Online (Sandbox Code Playgroud)

如果任何 Value1 == 7 AND如果在给定内有任何 ,那么我想返回。Value2 == 9GroupTrue

我试过无济于事:

df['Expected_Output']= df.groupby('Group').Value1.isin(7) &  df.groupby('Group').Value2.isin(9)
Run Code Online (Sandbox Code Playgroud)

注意:- 可以输出真/假或 1/0。

San*_*apa 9

groupbyGroup列上使用,然后使用transformlambda function作为:

g = df.groupby('Group')
df['Expected'] = (g['Value1'].transform(lambda x: x.eq(7).any()))&(g['Value2'].transform(lambda x: x.eq(9).any()))
Run Code Online (Sandbox Code Playgroud)

或使用groupby,applymerge使用参数how='left'为:

df.merge(df.groupby('Group').apply(lambda x: x['Value1'].eq(7).any()&x['Value2'].eq(9).any()).reset_index(),how='left').rename(columns={0:'Expected_Output'})
Run Code Online (Sandbox Code Playgroud)

或使用groupby,applymap作为:

df['Expected_Output'] = df['Group'].map(df.groupby('Group').apply(lambda x: x['Value1'].eq(7).any()&x['Value2'].eq(9).any()))
Run Code Online (Sandbox Code Playgroud)
print(df)
   Group  Value1  Value2  Expected_Output
0      1       3       9             True
1      1       7       6             True
2      1       9       7             True
3      2       3       8            False
4      2       8       5            False
5      2       7       6            False
Run Code Online (Sandbox Code Playgroud)