繁体   English   中英

熊猫-检查数据框中每个组的条件

[英]pandas - checking a condition for each group in a 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(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 == 1y == 1同时出现,但仅在由variable1variable2定义的每个子组中。 因此,对于上面显示的数据帧,满足index == 4 (组Aa )的条件,但不满足index == 3 (组BaBb )的条件。

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

您可以在2个第一级上使用groupby variable1variable2来获得该级别的xy列的总和:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM