微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 具有布尔条件的Groupby在Pandas中的一列中为True

这是我想要使用groupby的数据框

Value           Boolean1        Boolean2
 5.175603       False           False
 5.415855       False           False
 5.046997       False           False
 4.607749       True            False
 5.140482       False           False
 1.796552       False           False
 0.139924       False           True
 4.157981       False           True
 4.893860       False           False
 5.091573       False           False
 6              True            False
 6.05           False           False

我想将groupby与Boolean1和Boolean2列一起使用. groupby从False继续,除非它找到True并且它同时检查两列,然后再次检查False再次为True.如果有nomore,那么它可以忽略其余的False(与之对应的值)或者它可以在那里

我想达到类似的目的.

Value       Boolean1            Boolean2

这是一组

 5.175603       False               False
 5.415855       False               False
 5.046997       False               False
 4.607749       True                False

这是另一个

5.140482        False               False
 1.796552       False               False
 0.139924       False               True 
4.157981        False               True

这是另一个

 4.893860       False               False
 5.091573       False               False
 6              True                False

解决方法:

我的想法是在至少一个True列之前检查两列中的Falses:

#chain condition together by OR and invert
m = ~(df['Boolean1'] | df['Boolean2'])
#get consecutive groups with AND for filter only Trues 
#(because inverting, it return False in both cols)
s = (m.ne(m.shift()) & m).cumsum()

for i, x in df.groupby(s):
    print (x)

dtype: int32
      Value  Boolean1  Boolean2
0  5.175603     False     False
1  5.415855     False     False
2  5.046997     False     False
3  4.607749      True     False
      Value  Boolean1  Boolean2
4  5.140482     False     False
5  1.796552     False     False
6  0.139924     False      True
7  4.157981     False      True
       Value  Boolean1  Boolean2
8   4.893860     False     False
9   5.091573     False     False
10  6.000000      True     False
    Value  Boolean1  Boolean2
11   6.05     False     False

详情:

print (m)
0      True
1      True
2      True
3     False
4      True
5      True
6     False
7     False
8      True
9      True
10    False
11     True
dtype: bool

print (s)
0     1
1     1
2     1
3     1
4     2
5     2
6     2
7     2
8     3
9     3
10    3
11    4
dtype: int32

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐