Python pandas-检查数据帧中每个组的条件

Python pandas-检查数据帧中每个组的条件,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个数据帧: df = pd.DataFrame({'index' : range(8), 'variable1' : ["A","A","B","B","A","B","B","A"], 'variable2' : ["a","b","a","b","a","b","a","b"], 'variable3' : ["x","x","x","y","y","y","x","y"], 'result': [1,0,0,1,1,0,0,1]}) df2 = df.pivot_table(val

我有一个数据帧:

df = pd.DataFrame({'index' : range(8),
'variable1' : ["A","A","B","B","A","B","B","A"],
'variable2' : ["a","b","a","b","a","b","a","b"],
'variable3' : ["x","x","x","y","y","y","x","y"],
'result': [1,0,0,1,1,0,0,1]})

df2 = df.pivot_table(values='result',rows='index',cols=['variable1','variable2','variable3'])
df2['A']['a']['x'][4] = 1
df2['B']['a']['x'][3] = 1

variable1   A               B    
variable2   a       b       a   b
variable3   x   y   x   y   x   y
index                            
0           1 NaN NaN NaN NaN NaN
1         NaN NaN   0 NaN NaN NaN
2         NaN NaN NaN NaN   0 NaN
3         NaN NaN NaN NaN   1   1
4           1   1 NaN NaN NaN NaN
5         NaN NaN NaN NaN NaN   0
6         NaN NaN NaN NaN   0 NaN
7         NaN NaN NaN   1 NaN NaN
现在,我想检查
x==1
y==1
是否同时出现,但仅限于
variable1
variable2
定义的每个子组内。因此,对于上面显示的数据帧,对于
index==4
(组
A-A
)满足条件,但对于
index==3
(组
B-A
B-B
)不满足条件


我想需要一些
groupby()
magic,但我找不到正确的方法。我也尝试过使用堆叠的数据帧(使用
df.stack()
),但这并没有让我更接近…

您可以在两个第一级
variable1
variable2
上使用
groupby
,以获得该级
x
y
列的总和:

r = df2.groupby(level=[0,1], axis=1).sum()

r
Out[50]: 
variable1   A       B    
variable2   a   b   a   b
index                    
0           1 NaN NaN NaN
1         NaN   0 NaN NaN
2         NaN NaN   0 NaN
3         NaN NaN   1   1
4           2 NaN NaN NaN
5         NaN NaN NaN   0
6         NaN NaN   0 NaN
7         NaN   1 NaN NaN
因此,您要搜索的行是包含值2的行:

r[r==2].dropna(how='all')
Out[53]: 
variable1  A       B    
variable2  a   b   a   b
index                   
4          2 NaN NaN NaN

您正在进行链分配,这在本例中有效,但请参见,最好执行
df2.loc[:,('A','A','x',4)]=1
,这看起来不错,但在搜索更通用的解决方案时,我能做些什么?例如,当我有
变量3==x | | y | | z
时?我知道我可以用数字做一些魔术(例如,
x->1
y->2
z->4
,这样每个和的组合都是唯一的,但这会变得复杂…)